由於this question已退回四票,所以我想再次提出一個更狹義的問題,希望社區能夠更有利地看待。爲了支持向後兼容性,明確設計了哪些Java設計?
Java中的哪些特定設計決策被記錄爲完成的方式不是因爲這是首選設計決策,而是因爲它需要支持向後兼容性。
明顯的例子是泛型,在運行時無法檢測類型參數。 (所以你不能做的:
public void addEmptyMember(List<?> someList) {
if (someList instanceof List<String>) {
((List<String>) someList).add("");
}
}
存在於語言的設計和標準的API
作爲唯一/主要原因,第三個選項是否真的選擇向後兼容?在我看來,即使沒有向後兼容性,它也是有意義的。 – 2009-06-07 15:46:42
在開始語言的可變參數的任何實現中,您希望有一個單獨的語法來「分解此數組並將其元素作爲可變參數中的參數傳遞」。(例如,* args在python中調用記法,甚至在lisp中調用函數)但是,他們不想在Java中執行此操作,因爲他們希望能夠「升級」現有的API函數以使用可變參數讓所有的老調用者(期望有一個陣列)仍然可以工作。 – 2009-06-07 19:22:51