Possible Duplicate:
What are the reasons why Map.get(Object key) is not (fully) generic
这类似于问题here ,在 java.util.Map 上。这个问题留下来作为指向该问题的指针。
<小时/>List
在 Java 5 中引入泛型之后,接口(interface)包含几个仍然接受对象作为参数的方法。例如:
boolean contains(Object o)
int lastIndexOf(Object o)
boolean remove(Object o)
我期望这些方法能够使用类型参数。像这样的事情:
boolean contains(E e) // Where the interface is defined as List<E>
尽管如此,它必须是 <? extends E>
,但我不确定其语法。
这些方法采用对象是否有设计原因,或者是为了向后字节码兼容性,还是其他原因?
最佳答案
类型参数仅真正用于确保添加到列表或从列表中检索的任何内容都是正确的类型。它并不关心你是否给它一个另一种类型的对象来在集合中查找,因为无论如何它只会使用 Object.equals() 。它根本找不到它,这是预期的行为。
编辑:评论中引用的 Kevin B 关于此问题的博客文章提供了更好的解释。
关于java - 为什么几个 java.util.List 方法不使用类型参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1798512/