我试图了解使用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...
在互联网上,我发现了以下规则:
- 图元加宽>装箱> Varargs。
- 不允许加宽和装箱(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
拳击
int
来Integer
和拉大到Long
虽然int
对Integer
拳击很好,但Integer
对Long
有效拓宽却不大。Long
不是的超型Integer
。所以那是无效的。一种选择是加宽,然后进行拳击。但是在Java中不允许这种转换。因此,剩下的唯一选择是使用varargs。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句