3.2 如果要调用的方法可以和两个可变参数匹配,则出现错误,例如下面的代码:

package com;
// 这里使用了静态导入
import static java.lang.System.out;
public class VarArgsTest1 {
public void print(String... args) {
for (int i = 0; i < args.length; i++) {
out.println(args[i]);
}
}
public void print(String test,String...args ){
out.println("----------");
}
public static void main(String[] args) {
VarArgsTest1 test = new VarArgsTest1();
test.print("hello");
test.print("hello", "alexia");
}
}

    对于上面的代码,main方法中的两个调用都不能编译通过,因为编译器不知道该选哪个方法调用,如下所示:

  3.3 一个方法只能有一个可变长参数,并且这个可变长参数必须是该方法的后一个参数

  以下两种方法定义都是错误的。

public void test(String... strings,ArrayList list){
}
public void test(String... strings,ArrayList... list){
}

  4. 可变长参数的使用规范

  4.1 避免带有可变长参数的方法重载:如3.1中,编译器虽然知道怎么调用,但人容易陷入调用的陷阱及误区

  4.2 别让null值和空值威胁到变长方法,如3.2中所示,为了说明null值的调用,重新给出一个例子:

package com;public class VarArgsTest1 {
public void print(String test, Integer... is) {
}
public void print(String test,String...args ){
}
public static void main(String[] args) {
VarArgsTest1 test = new VarArgsTest1();
test.print("hello");
test.print("hello", null);
}
}

   这时会发现两个调用编译都不通过: