不明确的可变参数方法调用编译错误

use*_*290 4 java variadic-functions

method(1);  // This works -

void method(int... x) { }
void method(int x) { }  // - this method is called
Run Code Online (Sandbox Code Playgroud)

如果我向第二个方法添加 varargs 参数,则会收到“对方法的引用不明确”编译错误:

method(1);  // This now fails

void method(int... x) { }
void method(int x, String... y) { }  // adding String... y causes a problem.
Run Code Online (Sandbox Code Playgroud)

由于 String...y 参数可以留为“空白”,为什么 Java 仍然不选择该方法?谢谢,如果有关于SO的紧密匹配的解释,我们深表歉意;我确实找过一个。

Mar*_*oun 5

编译器总是选择使用具体的方法。

在第一种情况下,因为参数的数量完全匹配void method(int x),所以它就是被调用的那个。

在第二种情况下,参数的数量与任何情况都不匹配,并且可以从两种方法调用它,从而导致歧义。

检查JLS - 15.12.2。编译时步骤 2:确定方法签名以了解详细信息。