- 利用
... args
作为形参,如下例所示,可变参数列表可以随便接受任何类型的变量:
public class NewVarArgs{
static void printArray(Object... args){
for (Object obj:args){
System.out.print(obj+" ");
}
System.out.println();
}
}
public static void main(String[] args){
printArray(new Integer(47), new Float(3.14), new Double(11.11));
printArray(47, 3.14F, 11.11);
printArray("a", "b", "c");
printArray(new A(), new B(), new C());
printArray((Object[])new Integer[]{1,2,3,4});
printArray();
}
- 当然,也可以指定是同一类型的形参,那么此时就使用对应的类型作为形参开头,而不是
Object
,有
public class AutoboxingVarargs{
public static void f(Integer... args){
for(Integer i : args)
System.out.print(i+" ");
System.out.println();
}
public static void f(Float... args){
for(Integer i : args)
System.out.print(i+" ");
System.out.println();
}
public static void main(String []args){
f(new Integer(1), new Integer(2));
f(1,new Integer(2),3);
f(3F,new Float(3.3),3.6F);
}
}
- 这种调用是没问题的,但是因为可变参数列表是支持无参传递的,因此在调用无参函数的时候就会有语义混淆,如
f()
,此时需要在每个方法的第一个参数上使用一个标志位来选择调用函数。
参考