【发布时间】:2013-09-12 15:13:27
【问题描述】:
我知道 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?
【问题讨论】:
-
Java 应该为您选择哪一种实现方式?这种模棱两可正是实现者选择返回错误的原因。
-
@alfasin 我希望 java 可以选择一个具有最少自动装箱操作的选项。我错了,这句话:“另外:编译器不能总是根据需要的自动(取消)装箱次数选择最具体的方法。”从 Sotirios 提出的主题中进行了解释。谢谢!
标签: java compiler-errors overloading primitive-types autoboxing