2012-04-17 61 views
2

可能重複:
Why aren't Java Collections remove methods generic?爲什麼列出'remove()方法取Object而不是T?

有誰知道爲什麼MyDamnedUnclearList.remove()方法採取Object element而不是T element(或V extends T element)?

我失去了兩個小時才找到一個bug混合兩種intInteger Java類型(在List<Thread>列表...

+0

另外這一個http://stackoverflow.com/questions/857420/what-are-the-reasons-why-map-getobject-key-is-not-fully-generic其中我包括在我的回答 – 2012-04-17 22:21:02

+0

嗯問題現在談論線程......怪異的編輯。 – 2012-04-17 22:23:06

+0

線程只是我的實際情況,只是一個例子。我只是想表明它不是通用的,正如你在明確的答案中提到的那樣。 – 2012-04-17 22:27:17

回答

1

問題與現有的代碼和規範的向後兼容性做。

What are the reasons why Map.get(Object key) is not (fully) generic

所有在Javadoc的細節:

布爾刪除(對象o)

從此集合中刪除指定的 元素的單個實例(如果存在)(可選操作)。 更正式地說,如果此集合包含一個或多個這樣的元素,則刪除元素e使得(o == null?e == null: o.equals(e))。 如果此集合包含指定的元素(或等效地爲 ,如果此集合因該調用而更改),則返回true。

所以你看到它是否有相同的類型只是他們平等沒關係。

+0

我讀過這個javadoc,我只是認爲這是無稽之談,IHMO。 – 2012-04-17 22:29:49

+0

Java是一種非常古老的語言,經歷了許多次迭代,他們試圖像地獄一樣向後兼容。這與Python <3.0相似。不幸的是,Java沒有像Ruby和Python這樣的仁慈的獨裁者,所以打破東西的變化很難被放到語言中(我們有一個名爲oracle的邪惡的胖/懶惰獨裁者)。如果它真的困擾你,我建議你看看Scala(每個發行版都有相反的問題)。 – 2012-04-18 00:44:17

+0

我經常在Scala或Haskell中使用並喜歡編碼:) – 2012-04-18 14:59:20

相關問題