0
public class OverloadingVarargsMethodWithNormalMethod {
static void a(int... c){
System.out.println(c.length);
for(int array:c){
System.out.println(array);
}
}
static void a(int d,int e,int f){
System.out.println(d);
System.out.println(e);
System.out.println(f);
}
public static void main(String[] args) {
a(1,2,3);
}
}
Я ожидал двусмысленной ошибки. Но код запускает второй метод «a». Почему? Используются ли два метода для (1,2,3)?Перегрузка в методах Varargs
Компилятор предпочитает метод, который имеет право явные аргументы , Он будет возвращаться к методу varargs, если нет соответствия без varags. Это позволяет вам предоставлять методы для случаев, когда требуется определенное количество аргументов. – khelwood
См. [JLS 15.2.2] (http://docs.oracle.com/javase/specs/jls/se8/html/jls-15.html#jls-15.12.2): вызовы vararg считаются последними, на фазе 3. –