看看下面的代码:
public class Test {
public static void main(String... args) {
flipFlop("hello", new Integer(4), 2004);
// flipFlop("hello", 10, 2004); // this works!
}
private static void flipFlop(String str, int i, Integer iRef) {
System.out.println(str + " (String, int, Integer)");
}
private static void flipFlop(String str, int i, int j) {
System.out.println(str + " (String, int, int)");
}
}编译器提供了一个错误,即调用是不明确的:
描述资源路径定位类型方法flipFlop(String,int,Integer)对于类型测试Test.java scjp19 - inheritence/src第3行scjp19问题不明确
但是,如果注释掉的行使用ti调用触发器,则方法将被明确地调用(第二个方法,因为自动装箱是在使用原语本身之后产生的)。
我希望编译器看到第二个参数将以一种或另一种方式取消装箱,并根据第三个参数判断必须调用哪种方法。为什么不发生这种事?理由何在?
发布于 2010-03-07 17:12:18
注释行与flipFlop(String str, int i, int j)完全匹配。另一行匹配是因为自动装箱。
发布于 2010-03-07 17:24:15
flipFlop("hello",new (4),2004年);与flipFlop不兼容(String,int,Integer iRef)
发布于 2010-03-07 17:44:23
Java 5和更高版本进行自动装箱(将Integer转换为int),从而得到结果。
https://stackoverflow.com/questions/2397071
复制相似问题