我有兩個重載方法: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,是的,你可以,是的,你可以。當你嘗試時你會得到一個運行時異常。 –