2012-10-25 35 views
3

可能重複:
Why aren’t Java Collections remove methods generic?Java列表界面包含(對象O)方法的簽名

Java的Collection<E>接口具有contains方法具有以下簽名:

boolean contains(Object o) 

由於接口類型爲E不應簽名是
boolean contains(E o)

,以反映並只允許E類型的參數。

同樣的問題可以關於remove(Object o)方法

+2

可能是它在java世界中誕生之前被添加的世界 –

+0

查看[Collection JavaDoc](http://docs.oracle.com/javase/7/docs/api/java/util/Collection.html# contains(java.lang.Object)),它看起來像Java 1.2中的方法,泛型在Java語言中還不存在。 –

+0

此問題以前已被問及過很多次:[爲什麼Java Map 對get和remove方法採用非類型化參數?](http://stackoverflow.com/questions/4269147/why-does-java-mapk -v-take-an-untyped-parameter-for-the-the-get-and-remove-methods)和[爲什麼不是Java集合刪除方法通用?](http://stackoverflow.com/questions/104799/why -arent-java-collections-remove-methods-generic) –

回答

3

containsremove方法接受任何對象,因爲他們接受(並能與成功),可能不會是E實例的對象詢問。該contract for contains是:

返回true當且僅當這個集合包含至少一個元素e(O == NULLé== NULL:o.equals(e)項)

請注意,o實際上不必是集合中的對象;它只能通過equals測試。

對於remove也有同樣的想法。

另請參見this thread,其中指出使containsremove通用會打破許多現有的,完全有效的代碼。