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的紧密匹配的解释,我们深表歉意;我确实找过一个。
编译器总是选择使用最具体的方法。
在第一种情况下,因为参数的数量完全匹配void method(int x),所以它就是被调用的那个。
在第二种情况下,参数的数量与任何情况都不匹配,并且可以从两种方法调用它,从而导致歧义。
检查JLS - 15.12.2。编译时步骤 2:确定方法签名以了解详细信息。
| 归档时间: |
|
| 查看次数: |
320 次 |
| 最近记录: |