我尝试理解使用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)。
- 允许装箱和加宽。
- 当重载时,扩展+变量和装箱+变量只能以互斥的方式使用,即不能一起使用。
- 不允许在包装器类之间扩展
但是我不能把这个规则应用到这个代码行为。
你能帮我吗?
my wrong version:
包涵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
将
int
装箱至Integer
,并将Long
展宽
虽然int
到Integer
的装箱是可以的,但是Integer
到Long
不是有效的加宽。Long
不是Integer
的超类型。所以这是无效的。一个选项是展开,然后是装箱。但是在Java中不允许这样的转换。所以唯一的选择就是使用变量