谁能解释一下为什么这段代码会抛出一个不明确的重载错误,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);
}
}
最佳答案
Java 中的这些概念应该有所帮助,
允许装箱+加宽
,但不允许加宽+装箱
。
这些加宽、拳击和 Vararg 规则应该有所帮助:
- Primitive Widening > Boxing > Varargs.
- Widening and Boxing (WB) not allowed.
- Boxing and Widening (BW) allowed.
- While overloading, Widening + vararg and Boxing + vararg can only be used in a mutually exclusive manner
- Widening between wrapper classes not allowed.
- Widening+varArgs & Boxing+varargs are individually allowed (but not allowed in overloaded version of method).
- Boxing+Widening is preferred over Boxing+Varargs.
希望这有帮助。
关于java - Var-args 重载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18314454/