[转] java使用省略号代替多参数

[转] java使用省略号代替多参数

ID:37553517

大小:265.55 KB

页数:8页

时间:2019-05-25

[转] java使用省略号代替多参数_第1页
[转] java使用省略号代替多参数_第2页
[转] java使用省略号代替多参数_第3页
[转] java使用省略号代替多参数_第4页
[转] java使用省略号代替多参数_第5页
资源描述:

《[转] java使用省略号代替多参数》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、J2SE1.5提供了“Varargs”机制。借助这一机制,可以定义能和多个实参相匹配的形参。从而,可以用一种更简单的方式,来传递个数可变的实参。本文介绍这一机制的使用方法,以及这一机制与数组、泛型、重载之间的相互作用时的若干问题。到J2SE1.4为止,一直无法在Java程序里定义实参个数可变的方法——因为Java要求实参(Arguments)和形参(Parameters)的数量和类型都必须逐一匹配,而形参的数目是在定义方法时就已经固定下来了。尽管可以通过重载机制,为同一个方法提供带有不同数量的形参的版本,但是这仍然不能达到让实参数量任意变化的目的。然而,有些方法的语义要求

2、它们必须能接受个数可变的实参——例如著名的main方法,就需要能接受所有的命令行参数为实参,而命令行参数的数目,事先根本无法确定下来。对于这个问题,传统上一般是采用“利用一个数组来包裹要传递的实参”的做法来应付。1.用数组包裹实参“用数组包裹实参”的做法可以分成三步:首先,为这个方法定义一个数组型的参数;然后在调用时,生成一个包含了所有要传递的实参的数组;最后,把这个数组作为一个实参传递过去。这种做法可以有效的达到“让方法可以接受个数可变的参数”的目的,只是调用时的形式不够简单。J2SE1.5中提供了Varargs机制,允许直接定义能和多个实参相匹配的形参。从而,可以用一

3、种更简单的方式,来传递个数可变的实参。Varargs的含义大体说来,“Varargs”是“variablenumberofarguments”的意思。有时候也被简单的称为“variablearguments”,不过因为这一种叫法没有说明是什么东西可变,所以意义稍微有点模糊。2.定义实参个数可变的方法只要在一个形参的“类型”与“参数名”之间加上三个连续的“.”(即“...”,英文里的句中省略号),就可以让它和不确定个实参相匹配。而一个带有这样的形参的方法,就是一个实参个数可变的方法。清单1:一个实参个数可变的方法privatestaticintsumUp(int...val

4、ues){}注意,只有最后一个形参才能被定义成“能和不确定个实参相匹配”的。因此,一个方法里只能有一个这样的形参。另外,如果这个方法还有其它的形参,要把它们放到前面的位置上。编译器会在背地里把这最后一个形参转化为一个数组形参,并在编译出的class文件里作上一个记号,表明这是个实参个数可变的方法。清单2:实参个数可变的方法的秘密形态privatestaticintsumUp(int[]values){}由于存在着这样的转化,所以不能再为这个类定义一个和转化后的方法签名一致的方法。清单3:会导致编译错误的组合privatestaticintsumUp(int...value

5、s){}privatestaticintsumUp(int[]values){}空白的存亡问题根据J2SE1.5的语法,在“...”前面的空白字符是可有可无的。这样就有在“...”前面添加空白字符(形如“Object...args”)和在“...”前面不加空白字符(形如“Object...args”)的两种写法。因为目前和J2SE1.5相配合的JavaCodeConventions还没有正式发布,所以无法知道究竟哪一种写法比较正统。不过,考虑到数组参数也有“Object[]args”和“Object[]args”两种书写方式,而正统的写法是不在“[]”前添加空白字符,似乎

6、采取不加空白的“Object...args”的写法在整体上更协调一些。3.调用实参个数可变的方法只要把要传递的实参逐一写到相应的位置上,就可以调用一个实参个数可变的方法。不需要其它的步骤。清单4:可以传递若干个实参sumUp(1,3,5,7);在背地里,编译器会把这种调用过程转化为用“数组包裹实参”的形式:清单5:偷偷出现的数组创建sumUp(newint[]{1,2,3,4});另外,这里说的“不确定个”也包括零个,所以这样的调用也是合乎情理的:清单6:也可以传递零个实参sumUp();这种调用方法被编译器秘密转化之后的效果,则等同于这样:清单7:零实参对应空数组sum

7、Up(newint[]{});注意这时传递过去的是一个空数组,而不是null。这样就可以采取统一的形式来处理,而不必检测到底属于哪种情况。4.处理个数可变的实参处理个数可变的实参的办法,和处理数组实参的办法基本相同。所有的实参,都被保存到一个和形参同名的数组里。根据实际的需要,把这个数组里的元素读出之后,要蒸要煮,就可以随意了。清单8:处理收到的实参们privatestaticintsumUp(int...values){intsum=0;for(inti=0;i

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。