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