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更具体,但仍然会引发编译错误。
我在eclipse和命令提示符下尝试使用jdk1.8和jdk10时,得到的结果都是相同的:错误:对'foo'的引用不明确。
答案 0 :(得分:1)
这取决于您使用的JDK版本。
我已经在JDK 8上运行了您的代码,并且运行良好,它执行了第一种方法。这是因为,在JDK 8上,编译器将数字1和2强制转换为整数。
如果要执行第二个方法,则需要将第一个参数转换为long值。像这样:
public static void main(final String[] args) {
foo(1l, 2);
}