可能重复:
为什么 Java 集合删除方法不是通用的?
JavaCollection<E>接口有一个contains具有以下签名的方法:
boolean contains(Object o)
由于接口是具有类型的通用接口,E因此签名不应该是
boolean contains(E o)
反映这一点,并且只允许 type 的参数E。
remove(Object o)关于方法可以问同样的问题
可能重复:
为什么 Java 集合删除方法不是通用的?
JavaCollection<E>接口有一个contains具有以下签名的方法:
boolean contains(Object o)
由于接口是具有类型的通用接口,E因此签名不应该是
boolean contains(E o)
反映这一点,并且只允许 type 的参数E。
remove(Object o)关于方法可以问同样的问题
和方法接受任何对象contains,remove因为它们接受(并且可以成功)可能不是E. 合同contains为:
当且仅当此集合包含至少一个元素 e 满足 (o==null ? e==null : o.equals(e)) 时才返回 true
请注意,o实际上不一定是集合中的对象;它必须只是通过equals测试。
同样的想法也适用remove。
另请参阅此线程,其中指出 makecontains和removegeneric 会破坏许多现有的、完全有效的代码。