java - 为什么几个 java.util.List 方法不使用类型参数?

标签 java generics collections

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/

相关文章:

java - android HttpClient 加载许多小缩略图

java - Java 和 Arduino 进程共享串口

java - Jackson JSON + Java 泛型获取 LinkedHashMap

c# - 是否可以使对象公开类型参数的接口(interface)?

java - 并发修改异常

collections - Laravel 合并集合信从 4.0 升级到 4.1 时出错

java - 在字符串上应用 JDK 8 消费者

java - 索引 neo4j 中的现有关系

泛型和多态

c# - 在 C# 中导航集合的通用列表