5

可能重复:
为什么 Java 集合删除方法不是通用的?

我注意到很少有 LinkedList 操作采用通用参数类型 E,而少数采用 'Object' 作为参数。例如,

add(E e) 
remove(Object o) 

这样做有特定的理由吗?为什么不让“删除”采用泛型类型 E。(我知道类型擦除后没关系,但只是想知道)。

4

3 回答 3

1

这是因为删除操作使用方法检查相等性equals(),并且equals()方法将 Object 作为参数而不是 generic 。

于 2012-07-24T05:23:30.927 回答
0

因为调用者可以调用removecontains使用任何类型的对象,并且代码仍然可以正常执行。集合的类型参数使用的编译时契约只是保证*集合中的任何东西都是给定的类型。它不关心你是否询问它是否包含不同类型的对象。

* Nitpicker's Corner,我知道 Java 泛型确实不能保证。我想更多的语法糖。

于 2012-07-24T05:05:22.273 回答
0

add 和 remove 方法都继承自 Collection 接口。remove 方法没有用通用参数进行改造,大概是因为它无关紧要。删除不会影响集合的类型安全,当您更改地球上最流行的 API 之一时,更改越少越好。你会看到 contains 方法也遭受了同样的命运。

于 2012-07-24T05:10:22.990 回答