有没有人可以解释为什么这段代码会引发一个模糊的重载错误,当然Integer方法更具体和适用?
谢谢,
奈德
package object_orientation;
public class Ambiguous {
//ambiguous error compiler unsure whether boxing is needed or not
static void overload(Integer... d){
System.out.println("Integer");
}
static void overload(long... d){
System.out.println("Long");
}
public static void main(String a[]){
int i = 1;
overload(i);
}
}
答案 0 :(得分:3)
Java中的这些概念应该有所帮助,
Boxing + Widening is allowed
,但not Widening + Boxing
。
扩张,拳击和Vararg的这些规则应该有所帮助:
- 原始加宽>拳击>可变参数。
- 不允许加宽和装箱(WB)。
- 允许拳击和加宽(BW)。
- 在超载时,加宽+ vararg和Boxing + vararg只能 以互斥的方式使用
- 不允许在包装类之间扩展。
- 加宽+ varArgs& Boxing + varargs是单独允许的(但在重载版本的方法中不允许)。
- 拳击+加宽比Boxing + Varargs更受欢迎。
醇>
希望这有帮助。