В раздел 15.12.2.5 Спецификации языка Java, в нем говорится о том, как выбрать наиболее конкретный метод в обоих случаях методов с фиксированная арность и методы переменной arity (т.е. varargs
).
То, что я не могу найти в JLS, - это что-то о том, чтобы решить два метода, когда один из них имеет фиксированную arity и один из переменных arity. Например:
public interface SomeApi {
public String getSomething(String arg); // method 1
public String getSomething(String ... args); // method 2
}
Компилируется так же хорошо, как и следовало ожидать (по причинам, изложенным Йони ниже). Этот код вызова также компилируется:
SomeApi api = ...
Object o = api.getSomething("Hello");
и если вы запустите его, вызывается method #1
(т.е. метод без varargs). Почему этот код не является двусмысленным? Почему метод фиксированной arity более конкретный, чем переменная? Может ли кто-нибудь указать мне на соответствующий бит спецификации?