为何f(1)能通过,而l(1,1,1)却不能通过,会报重载模糊匹配的错误,求大神解答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");
}
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 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");
}
}
public static void l(int... i) {
System.out.println("int");
} // function 1public static void l(float... i) {
System.out.println("float");
} // function 2
两个方法删掉任何一个就OK,原因f(1,1,1)两个方法都可以匹配。
public static void l(int... i){
System.out.println("int");
}
public static void l(float... i){
System.out.println("float");
}
当 l();时这种情况会产生混乱导致重载失败,
不妨试试 public static void l(int i){
System.out.println("int");
}
看还会不会出问题,我还没有调试。应该不会出问题。希望是这样。
我说了这种情况会导致系统混乱。
当没有参数时l();调用该方法是系统不知道该调用l(int... i)还是l(float... i),这样就会引发错误,因为两个都匹配。而且也没有那一个更匹配的概念。这就有悖于方法重载的规范。所以可能规范干脆不允许这种写法的重载,以免引起错误。