在Java Language Specification 的第 15.12.2.5 节中,它讨论了如何在具有固定数量的方法和可变数量的方法(即varargs
)的两种情况下选择最具体的方法。
我在 JLS 中找不到任何关于在两种方法之间做出决定的方法,其中一种方法是固定参数,另一种方法是可变参数。例如:
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");
如果你运行它,method #1
(即非可变参数方法)被调用。为什么这个调用代码没有歧义?为什么固定数量的方法比可变数量的方法更具体?有人可以指出规范的相关部分吗?