我知道 Java 中的重载规则,但在某些情况下,我的直觉不起作用。
让我们考虑一个例子:
public class Overloading {
public static void main(String[] args) {
long primitive = 3;
Long boxed = Long.valueOf(5);
doWork(primitive, boxed); //1
doWork(boxed, boxed); //2
doWork(primitive, primitive); //3
}
static void doWork(Long a, Long b) {}
static void doWork(long a, Long b) {}
}
你知道什么(1、2或3)会编译成功吗?
第一个和第二个会,但第三个不会(由于雄心勃勃的方法调用)。
为什么javac
这样设计却解决不了这种情况?为什么不将#3 转换为#1?