可变长度参数列表 String...

jdk1.5的新特性:变长变量。

1. 定义实参个数可变的方法

只要在一个形参的“类型”与“参数名”之间加上三个连续的“.”(即“...”,英文里的句中省略号),就可以让它和不确定个实参相匹配。而一个带有这样的形参的方法,就是一个实参个数可变的方法。注意调用参数可变方法的多种形式

	public static void main(String[] args) throws Exception {
		print();
		print("a");
		print("a", "b");
		print(new String[] { "aa", "bb" });
	}

	public static void print(String... strings) {

		if (strings.length == 0) {
			System.out.println("null");
		}
		for (String string : strings) {
			System.out.println(string);
		}
	}

注意,只有最后一个形参才能被定义成“能和不确定个实参相匹配”的。因此,一个方法里只能有一个这样的形参。另外,如果这个方法还有其它的形参,要把它们放到前面的位置上。

编译器会在背地里把这最后一个形参转化为一个数组形参,并在编译出的class文件里作上一个记号,表明这是个实参个数可变的方法。

 

因为存在着数组转换,所以就不能再写一个对应类似的数组包裹参数的重载方法,编译器会认为这是一个方法进而报错如下:

 

 

2. 处理个数可变的实参

处理个数可变的实参的办法,和处理数组实参的办法基本相同。所有的实参,都被保存到一个和形参同名的数组里。根据实际的需要,把这个数组里的元素读出之后,要蒸要煮,就可以随意了。

3.可变参数的重载

传统上,一个重载方法的各个版本之中,只有形参数量与实参数量正好一致的那些有被进一步考虑的资格。但是Varargs机制引入之后,完全可以出现两个版本都能匹配,在其它方面也别无二致,只是一个实参个数固定,而一个实参个数可变的情况。

遇到这种情况时,所用的判定规则是“实参个数固定的版本优先于实参个数可变的版本”

相关推荐
©️2020 CSDN 皮肤主题: 技术黑板 设计师:CSDN官方博客 返回首页