首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2EE开发 >

一个诡异的重载有关问题

2012-05-04 
一个诡异的重载问题为何f(1)能通过,而l(1,1,1)却不能通过,会报重载模糊匹配的错误,求大神解答Java codepub

一个诡异的重载问题
为何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");
}
}
[解决办法]
探讨
我不是想问怎么才能编译通过,只是想知道为什么会有这么诡异的问题,3楼回答的还稍微靠谱

热点排行