【发布时间】:2018-08-01 10:04:18
【问题描述】:
public static void foo(int... a){}
public static void foo(long b, Integer... a){}
public static void main(String[] args) {
foo(1, 2); //Why is this call ambiguous?
}
我已经阅读了本节中关于变量 arity 调用的第三条规则:Choosing the Most Specific Method,但我仍然感到困惑,因为对于调用 foo(1, 2),形式参数 long 和 Integer 都没有那么具体int,但它仍然会引发编译错误。
我尝试了 jdk1.8 和 jdk10,在 eclipse 和命令提示符下,我得到的只是相同的结果:错误:对 'foo' 的引用不明确。
【问题讨论】:
-
您使用的是哪个 Java 版本?使用 Java 8 对我来说效果很好
-
您使用的是哪个 IDE?
-
我自己是个菜鸟,但我的印象是 varargs 需要装箱,因为它们最终会出现在列表中。所以也许 int to long vs boxing an int 不能正确比较哪个是更好的匹配?
-
另外,
1是一个int;1L将是long。 -
@alexander.egger 我使用 jdk1.8.0_172 和 eclipse photon
标签: java overloading