在Java语言规范的第15.12.2.5节中,讨论了如何在具有固定arity和可变arity(即
但我在JLS中找不到任何关于如何在一个固定arity方法和一个可变arity方法之间做出决策的内容。例如:
varargs
)方法的情况下选择最具体的方法。但我在JLS中找不到任何关于如何在一个固定arity方法和一个可变arity方法之间做出决策的内容。例如:
public interface SomeApi {
public String getSomething(String arg); // method 1
public String getSomething(String ... args); // method 2
}
如Yoni所述,编译结果与预期一致。下面的调用代码也可以编译:
SomeApi api = ...
Object o = api.getSomething("Hello");
如果你运行它,将调用方法#1
(即非变参方法)。为什么这个调用代码不会产生歧义?为什么固定参数方法比可变参数方法更具体?有人能指出规范中相关的部分吗?