下面的代碼中的Java編譯罰款:方法調用順序
public static void main(String[] args) {
int i =5;
call(i);
}
static void call(int i){
System.out.println("int");
}
static void call(long i){
System.out.println("long");
}
static void call(Integer i){
System.out.println("Integer");
}
static void call(Object i){
System.out.println("Object");
}
但是,下面的代碼提供編譯時錯誤:
public static void main(String[] args) {
int i =5;
call(i);
}
static void call(int... i){
System.out.println("int...");
}
static void call(long... i){
System.out.println("long...");
}
static void call(Integer... i){
System.out.println("Integer...");
}
static void call(Object... i){
System.out.println("Object...");
}
爲什麼有工作,而類似的調用機制不是由Java的維護VAR-ARGS?在第二個例子中,呼叫應該轉到方法static void call(int... i)
找到詳細信息沒有'Integer'和'Object'版本嗎?如果是的話,那是因爲自動裝箱。 – NilsH 2013-04-30 05:38:34
http://stackoverflow.com/questions/2521293/bug-with-varargs-and-overloading – 2013-04-30 05:47:39
可能重複,@ c.P.u1。不過,應該用最近的jdk 7版本來解決,所以我認爲這個特定的錯誤是由於自動裝箱。 – NilsH 2013-04-30 06:08:41