我有两个重载方法: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,是的,你可以,是的,你可以。当你尝试时你会得到一个运行时异常。 –