#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.
Комментариев нет:
Отправить комментарий