package cast_problems;
public class OverloadingVarargs1 {
static void f(Character... args) {
System.out.print("first");
for(Character c : args)
System.out.print(" " + c);
System.out.println();
}
static void f(Integer... args) {
System.out.print("second");
for(Integer c : args) System.out.print(" " + c);
System.out.println();
}
static void f(long... args) {
System.out.println("third");
}
public static void main(String[] args) {
f('a', 'b', 'c');
f(1);
f(2,1);
f(0);
f(0L);
}
}
照着java编程思想测试代码,出现了二义性错误!!!,很是不理解,仔细看了代码发现f(long ...args) 应该是定义成Long型,定义成long型出现二义性错误是f(1) 与f(0L) 匹配多个函数,正确写法就是如下全部写成类。
package cast_problems;
public class OverloadingVarargs {
static void f(Character... args){
System.out.print("first");
for(Character c : args)
System.out.print(" "+c);
System.out.println();
}
static void f(Integer... args){
System.out.print("second");
for(Integer i : args)
System.out.print(" "+i);
System.out.println();
}
static void f(Long... args){
System.out.print("third");
}
static void test(long x){
System.out.print("long test ");
}
public static void main(String[] args) {
f('a', 'b', 'c');
f(1);
f(2,1);
f(0);
f(0L);
test(1);// 整型能直接传给long型使用
}
}
或者全部直接改成简单类型,省去由int到Integer 自动包装机制。
package cast_problems;
public class OverloadingVarargs {
static void f(char... args){
System.out.print("first");
for(Character c : args)
System.out.print(" "+c);
System.out.println();
}
static void f(int ... args){
System.out.print("second");
for(Integer i : args)
System.out.print(" "+i);
System.out.println();
}
static void f(long ... args){
System.out.print("third");
}
static void test(long x){
System.out.print("long test ");
}
public static void main(String[] args) {
f('a', 'b', 'c');
f(1);
f(2,1);
f(0);
f(0L);
test(1);// 整型能直接传给long型使用
}
}