Почему следующая программа выдает исключение?
public class MainClass{
public static void main(String[] argv){
callMethod(2);
}
public static void callMethod(Integer... i){
System.out.println("Wrapper");
}
public static void callMethod(int... i){
System.out.println("Primitive");
}
}
Метод callMethod (Integer []) неоднозначен для типа MainClass
Хорошо, я вижу, что один из двух методов будет работать (если другой закомментирован), но я также знаю, что существует иерархия того, что происходит, если примитив не точно соответствует типу ввода метод.
Первое, что пытаются сделать, - это расширить примитив. Итак, если был третий метод:
public static void callMethod(long i){
System.out.println("long");
}
Код будет печатать длинный
Во-вторых, нужно упаковать примитив. Так что если бы был метод, принимающий целое число, то он был бы вызван.
Третий приоритет - это var-args.
Исходя из вышеизложенного приоритета, я бы ожидал, что вторым приоритетом будет. Я ожидал бы, что int будет заключен в Integer и (Integer ...) будет вызван. Но, конечно, этого не происходит. Вместо этого выдается исключение.
Кто-нибудь видит и может объяснить, почему расстановка приоритетов не применяется в этом примере?
Ура!