Страницы

Поиск по вопросам

четверг, 19 марта 2020 г.

Java Var-arg Overloading

#java


Недавно столкнулся с таким вот примером :
 static void show(int ... arg) {
    System.out.println("int");
}

static void show(Integer ... arg) {
    System.out.println("Integer");
}

public static void main(String[] args) {
    show(1,2);
}

В результате компиляции выкидывает Error : 
The method show(int[]) is ambiguous
хотя :
static void show(int arg) {
    System.out.println("int");
}

static void show(Integer arg) {
    System.out.println("Integer");
}

public static void main(String[] args) {
    show(1); // int
}

var-arg внутри себя создает массив и ложит туда наши аргументы которые пришли в метод
, получается что компилятор в момент компиляции обнаруживает что эти два метода идентичны
, но почему ?? один метод принимает примитивы , другой объекты . Могу только предположить
что там идет какае-то магия с автобоксингом , так как компилятор может сделать автобоксинг
для примитива то получается что он при создании  массива внутри может легко обернуть
примитив в обьект и создать массив Integer[].

Кто может дать ответ почему так ?    


Ответы

Ответ 1



Это баг. См. багрепорты: 6886431 : Handling of "most specific" varargs method inconsistent with JLS 6199075 : Unambiguous varargs method calls flagged as ambiguous.

Комментариев нет:

Отправить комментарий