爲什麼它(顯然)有所作爲是否我直接傳遞null
作爲參數,或者傳遞一個Object
,我分配值null
?與null參數的Java方法分派
Object testVal = null;
test.foo(testVal); // dispatched to foo(Object)
// test.foo(null); // compilation problem -> "The method foo(String) is ambiguous"
public void foo(String arg) { // More-specific
System.out.println("foo(String)");
}
public void foo(Object arg) { // Generic
System.out.println("foo(Object)");
}
換句話說,爲什麼是(註釋掉)以foo(...)
秒呼叫沒有分派到foo(Object)
?
更新:我使用Java 1.6。我可以毫無問題地編譯Hemal的代碼,但是我仍然無法編譯。我看到的唯一差別是Hemal的方法是靜態的,而我的方法不是。但我真的不明白爲什麼這應該有所作爲......?
更新2:已解決。我在我的類中有另一個方法foo(Runnable),所以調度程序不能明確地選擇最具體的方法。 (請參閱我在Hemal的第二個回答中的評論。)感謝大家的幫助。
剛剛測試這一點,我目瞪口呆的是,(一)6u11不說這是不明確的,和(b)在空解析字符串不會反對。每天學習新東西 - +1課程。 – 2008-12-18 09:17:32
@Software Monkey:一旦您接受常量null爲null類型,並且null類型爲所有類型的子類型,這是非常明顯的。 Object
2008-12-18 10:16:39