<分区>
为什么不是 Collection.remove(Object o)通用的?
好像Collection<E>
可能有 boolean remove(E o);
然后,当您不小心尝试删除(例如)Set<String>
而不是来自 Collection<String>
的每个单独的字符串,这将是一个编译时错误,而不是稍后的调试问题。
<分区>
为什么不是 Collection.remove(Object o)通用的?
好像Collection<E>
可能有 boolean remove(E o);
然后,当您不小心尝试删除(例如)Set<String>
而不是来自 Collection<String>
的每个单独的字符串,这将是一个编译时错误,而不是稍后的调试问题。
最佳答案
remove()
(在 Map
以及 Collection
中)不是通用的,因为您应该能够将任何类型的对象传递给 remove()
.删除的对象不必与您传递给 remove()
的对象的类型相同。 ;它只要求它们相等。来自 remove()
的规范, remove(o)
删除对象 e
这样 (o==null ? e==null : o.equals(e))
是true
.请注意,没有什么需要 o
和 e
是同一类型。这是因为 equals()
方法接受 Object
作为参数,而不仅仅是与对象相同的类型。
尽管如此,许多类都有 equals()
可能是普遍事实。定义为它的对象只能等于它自己类的对象,当然情况并非总是如此。例如,List.equals()
的规范表示如果两个 List 对象都是 List 并且具有相同的内容,则它们是相等的,即使它们是 List
的不同实现也是如此。 .所以回到这个问题中的例子,有可能有一个 Map<ArrayList, Something>
我调用remove()
用LinkedList
作为参数,它应该删除作为具有相同内容的列表的键。如果remove()
,这是不可能的是通用的并且限制了它的参数类型。
关于java - 为什么 Java Collections 的移除方法不是通用的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31807651/