выбора у меня есть два перегруженных метода: foo
и bar
Перегрузки переменной длины массивов, метод
//Object[]... vs Integer[]...
public static String foo(Object[]... args) { return "Object[] args"; }
public static String foo(Integer[]... args) { return "Integer[] args";}
//Object... vs Integer[]...
public static String bar(Object... args) {return "Object args";}
public static String bar(Integer[]... args) {return "Integer[] args";}
Теперь, когда я использую их как:
Integer[] i = { 5 };
System.out.println(foo(i));//Object[]... vs Integer[]...
System.out.println(bar(i));//Object... vs Integer[]...
Я получаю
Integer[] args
Object args
Вот вопрос: почему у нас есть два разных выхода?
Integer[]
может быть неявным образом отбрасываться как Object
, так и Object[]
.
Для тех, кто хочет играть в Шерлока [15.12.2.5. Выбор наиболее конкретного метода] (https://docs.oracle.com/javase/specs/jls/se8/html/jls-15.html#jls-15.12.2.5) – Pshemo
вы должны хотя бы упомянуть предупреждение компилятора. –
@Colonel, да, вы можете и да можете. Когда вы попробуете, вы получите исключение во время выполнения. –