package com.lwf.test;
public class TestJ {
void print(String... i){
for(String i1 : i){
System.out.println(i1 + ">>String");
}
}
void print(Integer... i){
for(Integer i1 : i){
System.out.println(i1 + ">>Integer");
}
}
public static void main(String[] args) {
TestJ s = new TestJ();
s.print(1);
s.print(new Integer("2"));
}
}
输出结果
1>>Integer
2>>Integer
再看下列代码:
package com.lwf.test;
public class TestJ {
void print(int... i){
for(int i1 : i){
System.out.println(i1 + ">>String");
}
}
void print(Integer... i){
for(Integer i1 : i){
System.out.println(i1 + ">>Integer");
}
}
public static void main(String[] args) {
TestJ s = new TestJ();
// s.print(1);
// s.print(new Integer("2"));
}
}
当可变参数方法有int 和Integer时,方法未调用前编译是没问题的。但打开方法调用
当调用时会报错。具体错误为
The method print(int[]) is ambiguous for the type TestJ
将代码改成
package com.lwf.test;
public class TestJ {
void print(int a,int... i){
for(int i1 : i){
System.out.println(i1 + ">>int");
}
}
void print(boolean b,Integer... i){
for(Integer i1 : i){
System.out.println(i1 + ">>Integer");
}
}
public static void main(String[] args) {
TestJ s = new TestJ();
s.print(1,2);
s.print(new Integer("2"),new Integer("3"));
s.print(true, new Integer("4"));
}
}
输出结果:
2>>int
3>>int
4>>Integer
结论,引用JAVA编程思想:你应该总是在重载方法的一个版本上使用可变参数列表,或者压根就不使用它。