[英]Ambiguous varargs method call compilation error
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有一个非常匹配的解释,我们会道歉; 我确实找了一个。
编译器总是选择使用最具体的方法。
在第一种情况下,因为参数的数量与void method(int x)
完全匹配,所以它是被调用的那个。
在第二种情况下,参数的数量与任何情况都不匹配,并且可以从两种方法调用它们,从而导致歧义。
检查JLS - 15.12.2。 编译时步骤2:确定方法签名以获取详细信息。
参数的数量可以是0或许多。 这使得
void method(int x, String... y){ }
类似于void method(int x){}
而且
void method(int... x){}
也类似于void method(int x){}
如果调用方法(1),编译器将找到两个适用于此调用的方法,并引发和异常。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.