可能重複:
Why aren't Java Collections remove methods generic?Java集合LinkedList的函數參數類型
我注意到幾個LinkedList的操作採取泛型參數類型E,而少數採取「對象」爲參數。例如,
add(E e)
remove(Object o)
是否有特定的理由要這樣做?爲什麼不使'刪除'採取泛型類型E.(我知道類型擦除後並不重要,但只是想知道)。
可能重複:
Why aren't Java Collections remove methods generic?Java集合LinkedList的函數參數類型
我注意到幾個LinkedList的操作採取泛型參數類型E,而少數採取「對象」爲參數。例如,
add(E e)
remove(Object o)
是否有特定的理由要這樣做?爲什麼不使'刪除'採取泛型類型E.(我知道類型擦除後並不重要,但只是想知道)。
添加和刪除方法都從Collection接口繼承。這種刪除方法沒有用一般的論證加以改進,可能是因爲它沒有關係。刪除不會影響集合的類型安全性,當您更改地球上最流行的API之一時,更少的更改就更好。你會發現包含方法也遭受同樣的命運。
因爲調用者可以使用任何類型的對象調用remove
或contains
,代碼仍然可以正常工作。集合類型參數使用的編譯時契約保證* 中的任何內容集合將是給定類型的。它不關心你是否問它是否包含不同類型的對象。我知道Java泛型實際上不是保證。我猜想更多的語法糖。
這是因爲使用equals()
方法和equals()
方法接受一個對象作爲參數不是通用去除平等操作檢查。
「因爲它沒關係」它*確實*重要。不同類型的對象可以相等。 – newacct 2012-07-24 18:34:32
它不值得考慮,因爲不同類型的對象永遠不會被添加到參數化集合中,因此要求remove參數化方法不會帶來任何收益。 – 2012-07-24 19:54:45
我沒有對添加到集合中的東西進行任何說明。只是'remove()'方法的定義要求它移除與傳遞的東西相等的東西 – newacct 2012-07-24 22:41:34