В разделе 15.12.2.5 спецификации языка Java говорится о том, как выбрать наиболее специфический метод в обоих случаях: методы с фиксированной арностью и методы с переменной арностью (т. Е. * 1004). *).
Что я не могу найти в JLS, так это выбор между двумя методами, где один имеет фиксированную арность, а другой - переменную арность . Например:
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). Почему этот код вызова не является двусмысленным? Почему метод фиксированной арности более специфичен, чем метод переменной арности? Может кто-нибудь указать мне на соответствующий бит спецификации?