method(1); // This works -
void method(int... x) { }
void method(int x) { } // - this method is called
如果我在第二种方法中添加一个varargs参数,我会得到一个"对方法的引用是不明确的"编译错误:
method(1); // This now fails
void method(int... x) { }
void method(int x, String... y) { } // adding String... y causes a problem.
由于String ... y参数可以保留"空白",为什么Java仍然选择该方法?谢谢,如果对SO有一个非常匹配的解释,我们会道歉;我确实找了一个。
答案 0 :(得分:4)
编译器总是选择使用 most 特定方法。
在第一种情况下,因为参数的号完全与void method(int x)
匹配,所以它就是被调用的那个。
在第二种情况下,参数的数量不匹配任何情况,并且可以从两种方法调用它们,从而导致歧义。
查看JLS - 15.12.2. Compile-Time Step 2: Determine Method Signature了解详情。
答案 1 :(得分:1)
参数的数量可以是0或许多。
void method(int x, String... y){ }
与void method(int x){}
和
void method(int... x){}
也类似于void method(int x){}
如果调用方法(1),编译器将找到两个适用于此调用的方法,并引发和异常。