Наиболее специфический метод с совпадениями как фиксированной/переменной arity (varargs)

В раздел 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 более конкретный, чем переменная? Может ли кто-нибудь указать мне на соответствующий бит спецификации?

Ответ 1

Первая фаза разрешения метода рассматривает только фиксированные методы arity, и процесс завершается, если совпадение найдено до того, как будут рассмотрены любые методы varargs.

От http://docs.oracle.com/javase/specs/jls/se6/html/expressions.html#15.12.2.2

15.12.2.2 Фаза 1: Определение Соответствие Arity. Способы, применимые Подтипирование

Если какой-либо метод, применяемый подтипами найдено, поиск применимых методы продолжаются с фазой 2 (§15.12.2.3). В противном случае наиболее выбран конкретный метод (§15.12.2.5) среди применяемых методов путем подтипирования.

(Мой акцент.)

Ответ 2

Я не могу указать вам спецификацию, но логически,

getSomething(String...args) 

переводится на

getSomething(String[] args)

без двусмысленности