用Object数组作为接收参数的数组:
package Varargs;
class A{}
public class VarArgs {
static void printArray(Object[] args){
for(Object obj:args){
System.out.print(obj+" ");
}
System.out.println();
System.out.println("******************************************");
}
public static void main(String[] args) {
printArray(new Object[]{47,3.14,11.11});
printArray(new Object[]{new Integer(47),new Float(3.14),new Double(11.11)});
printArray(new Object[]{"one","two","three"});
printArray(new Object[]{new A(),new A(),new A()});
}
}
这种方式的缺点是必须声明一个new Object[]{},才能够传递给printArray()方法。
下面这种方法的话就可以I省略数组的声明了:
package Varargs;
public class NewVarArgs {
static void printArray(Object... args){
for(Object obj:args){
System.out.print(obj+" ");
}
System.out.println();
System.out.println("******************************************");
}
public static void main(String[] args) {
printArray(47,3.14,11.11);
printArray(new Integer(47),new Float(3.14),new Double(11.11));
printArray("one","two","three");
printArray(new A(),new A(),new A());
//这种形式也可以接收数组
printArray((Object)new Integer[]{1,2,3,4});
//还可以为空
printArray();
}
}
在方法的接收类型中声明为:(Object...args),就可以直接接受所传递的参数。倒数第二行可以看出,也可以接收数组。
最后一行可以看出将0个参数传递给可变参数列表也是可行的,当具有可选的尾随参数时,这一特征就会很有用:
package Varargs;
public class OptionalTrailingArguments {
static void f(int required,String... args){
for(String s : args){
System.out.print(s+" ");
}
System.out.println();
System.out.println("*******************************");
}
public static void main(String[] args) {
f(0);
f(1,"one");
f(2,"two","three");
}
}
在可变参数列表中可以使用任何类型的参数,包括基本类型,比如:
package Varargs;
public class VarargType {
static void f(Character...args){
System.out.println(args.getClass());
System.out.println("length:"+args.length);
}
static void g(int...args){
System.out.println(args.getClass());
System.out.println("length:"+args.length);
}
public static void main(String[] args){
f('a');
//注意上面是单引号,不是双引号啊。单引号是Character,双引号是String
f();
g(1);
g();
//下面的这个数组和上面的接收的Int类型的方法是相同的格式,注意对比
System.out.println("int[]:"+new int[0].getClass());
//这样证明了可变参数列表不依赖于自动包装机制,而实际上上使用的是基本类型
}
}
需要说明的是,Integer和int类型的数据,可以和平相处,方法进行参数的接收的时候,没有影响,不需要我们进行转换:
package Varargs;
public class AutoboxingVarargs {
static void f(Integer...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(3,4,5,6,7,8);
f(9,new Integer(10),11);
}
}
——来自:Think in java