可能重复:
为什么 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
和remove
generic 会破坏许多现有的、完全有效的代码。