Variable-Arity Methods(Varargs)
可匹配不同长度的自变量的函数,意思就是说,定义好的同一个Method,可以接收个数不一样的变量,看起来有点类似于过载。
我们还是先来看一个例子吧。
[code]
//TestVarargs.java
public class TestVarargs{
//这个方法展示了varargs的基本语法
// 类型(Type),加3个点,再加变量名,中间可以有或无空格
// 而使用该变量时,是以一个Type[]的形式的,等于是一个Array
//public static void out(int... i){//这种可以
//public static void out(int ...i){//这种也可以
//public static void out(int ... i){//这种也可以
public static void out(int...i){//这种也可以
System.out.println("method:out(int... i),vararg.length:"+i.length);
if(i.length==0)
return;
//for-each featrue
for(Object ii:i)
System.out.print("\t "+ii);
System.out.println();
}
//和 out(Object... i) 存在二义性
//public static void out(int i1,int... i){...}
//varargs 只能出现在parameter的最后
//public static void out(int... i,String s){...}
//当然,其他变量可以出现在前面。
public static void out(String s,int... i){
System.out.println("method:out(String s,int... i),vararg.length:"+i.length);
if(i.length==0)
return;
//for-each future
for(int ii:i)
System.out.print("\t "+ii);
System.out.println();
}
public static void main(String args[]){
out(123,1343,4542,677675);
out(12323,43243,00);
out("",12);
out("");
out();
}
}
[/code]
该说明的基本上都在源码的注释里头了。
值得一提的是,根据JSR201的说法,对它的支持主要是在complier上,在VM的层面上是不需要支持的。在某种意义上,我们可以把它看作
[code]
out(int...i){};
out(123,1343,4542,677675);
==
out(int[] i){};
out(new Int[]{123,1343,4542,677675});
[/code]