Java Var args重载
有人能解释一下为什么这段代码会抛出一个不明确的重载错误吗?当然整数方法更具体、更适用吗 谢谢 内德Java Var args重载,java,overloading,variadic-functions,Java,Overloading,Variadic Functions,有人能解释一下为什么这段代码会抛出一个不明确的重载错误吗?当然整数方法更具体、更适用吗 谢谢 内德 Java中的这些概念应该会有所帮助, 允许装箱+加宽,但不允许加宽+装箱 这些加宽、装箱和变位规则应有助于: 基本体加宽>装箱>变量 不允许加宽和装箱(WB) 允许装箱和加宽(BW) 重载时,只能使用加宽+vararg和装箱+vararg 以相互排斥的方式使用 不允许在包装类之间加宽 单独允许加宽+varArgs和装箱+varArgs(但在方法的重载版本中不允许) 装箱+加宽优先于装箱+变宽 希望
Java中的这些概念应该会有所帮助, 允许
装箱+加宽
,但不允许加宽+装箱
这些加宽、装箱和变位规则应有助于:
希望这能有所帮助。查看
Integer
与int
不同Integer
是一个包装器。这是一篇很好的文章-如果在重载方法中将long…
更改为long
,它将被编译。我相信varargs会在编译时转换为数组,所以我认为这就是产生歧义的地方。我认为int将被简单地装箱并应用于整数var args,而长var args将被忽略,因为不能同时加宽和装箱。编译器告诉我有一个类型为AmbiguousSure,NP的不明确错误。很高兴这有帮助。你可以通过接受答案来结束问题。谢谢
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);
}
}