scelta Ho un due metodi di overload: foo
e bar
sovraccarico varargs array, metodo
//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";}
Ora, quando li uso come:
Integer[] i = { 5 };
System.out.println(foo(i));//Object[]... vs Integer[]...
System.out.println(bar(i));//Object... vs Integer[]...
sto ottenendo
Integer[] args
Object args
Ecco la domanda: perché abbiamo 2 uscite differenti?
Integer[]
può essere convertito implicitamente in Object
e Object[]
.
Per coloro che vogliono giocare a Sherlock [15.12.2.5. Scelta del metodo più specifico] (https://docs.oracle.com/javase/specs/jls/se8/html/jls-15.html#jls-15.12.2.5) – Pshemo
dovresti menzionare almeno l'avviso del compilatore. –
@ Colonel, sì puoi e si puoi. Otterrai un'eccezione di runtime quando lo proverai. –