一个诡异的重载问题
为何f(1)能通过,而l(1,1,1)却不能通过,会报重载模糊匹配的错误,求大神解答
Java code
public class Overloading {
public static void main(String[] args) {
f(1);
l(1,1,1);
}
public static void f(int i){
System.out.println("int");
}
public static void f(float i){
System.out.println("float");
}
public static void l(int... i){
System.out.println("int");
}
public static void l(float... i){
System.out.println("float");
}
------解决方案--------------------貌似单个数字才会默认为整数,一个数组不指定类型是没有默认类型的,你的代码把public static void l(int... i)方法去掉或把public static void l(int... i)方法去掉都能正常编译运行,因为只有一个方法时,编译器只能去匹配唯一的l(int...i)或l(float...i)方法,把参数数组转换成所需的类型,但两个方法同时存在时,编译器无法确定要把参数数组去匹配哪一个方法,就会报重载模糊匹配错误,而像下面这样指定了参数的类型,编译器就能确定应该匹配哪一个方法,就完全没有问题了
[code=Java][/code]
public class Overloading {
public static void main(String[] args) {
f(1);
l( 1f, 1f, 1f);
}
public static void f(int i) {
System.out.println("int");
}
public static void f(float i) {
System.out.println("float");
}
public static void l(int... i) {
System.out.println("int");
}
public static void l(float... i) {
System.out.println("float");
}
}
------解决方案--------------------