3

可能重复:
为什么 Java 集合删除方法不是通用的?

JavaCollection<E>接口有一个contains具有以下签名的方法:

boolean contains(Object o)

由于接口是具有类型的通用接口,E因此签名不应该是
boolean contains(E o)

反映这一点,并且只允许 type 的参数E

remove(Object o)关于方法可以问同样的问题

4

1 回答 1

4

和方法接受任何对象containsremove因为它们接受(并且可以成功)可能不是E. 合同contains为:

当且仅当此集合包含至少一个元素 e 满足 (o==null ? e==null : o.equals(e)) 时才返回 true

请注意,o实际上不一定是集合中的对象;它必须只是通过equals测试。

同样的想法也适用remove

另请参阅此线程,其中指出 makecontainsremovegeneric 会破坏许多现有的、完全有效的代码。

于 2012-10-25T00:05:54.077 回答