我尝试了解使用java编译器的重载规则。
对我来说太难了。
public class Main {
public static void var(Long x) {
System.out.println("Long");
}
public static void var(int... x) {
System.out.println("int... x");
}
public static void main(String... args) {
var(5);
}
}
输出:
int...
在互联网上,我找到了下一条规则:
- 原始加宽>拳击>可变参数。
- 不允许加宽和装箱(WB)。
- 允许拳击和加宽(BW)。
- 在超载时,Widening + vararg和Boxing + vararg只能以互斥的方式使用,即不能一起使用。
- 不允许在包装类之间扩展
醇>
但我无法将此规则应用于此代码行为。
你能帮助我吗?
我的错误的版本:
拳击int
- > Integer
并扩展为Long
public class Main {
public static void var(Object x) {
System.out.println("Object");
}
public static void var(int... x) {
System.out.println("int... x");
}
public static void main(String... args) {
var(5);
}
}
输出:
object
答案 0 :(得分:2)
将
int
装箱Integer
并扩大至Long
虽然int
到Integer
拳击很好,但Integer
到Long
不是有效的扩展。 Long
不是Integer
的超类型。这样做无效。一个选项是加宽,然后是装箱。但是Java中不允许这种转换。所以剩下的唯一选择是使用varargs。