为什么Java Collections不能通用删除方法?
为什么Collection.remove(Object o)
不通用?
好像Collection<E>
有boolean remove(E o);
然后,当你不小心尝试从中删除(例如)Set<String>
而不是每个String
时Collection<String>
,这将是编译时错误,而不是以后的调试问题。
回答:
remove()
(Map以及中的Collection
)不是通用的,因为你应该能够将任何类型的对象传递给remove()
。删除的对象不必与你传递给的对象具有相同的类型remove()
;它只要求它们相等。从本说明书中remove()
,remove(o)
将删除对象e,使得(o==null ? e==null : o.equals(e))
是true。请注意,没有什么要求,o并且e必须是相同的类型。这是因为该equals()
方法接受一个Objectas
参数,而不仅仅是与该对象相同的类型。
虽然,通常已经equals()
定义了许多类,以便其对象只能等于其自己的类的对象,这确实是正确的,但事实并非总是如此。例如,的规范List.equals()
说两个List
对象都是相同的,并且都是相同的内容,即使它们都是的不同实现,也是如此List
。因此,回到这个问题的示例中,有可能让Map<ArrayList, Something>and
和我remove()
一起使用LinkedListas
参数调用它,并且应该删除键,该键是具有相同内容的列表。如果remove()
是通用的并且限制了它的参数类型,那将是不可能的。
以上是 为什么Java Collections不能通用删除方法? 的全部内容, 来源链接: utcz.com/qa/401016.html