可变参数列表

用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

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值