Java Collection LinkedList函数参数类型

时间:2012-07-24 04:57:49

标签: java generics collections

  

可能重复:
  Why aren't Java Collections remove methods generic?

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

add(E e) 
remove(Object o) 

有特定的理由这样做吗?为什么不让'remove'采用泛型类型E.(我知道在类型擦除之后无关紧要,但只是想知道)。

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

因为调用者可以使用任何类型的对象调用removecontains,代码仍然可以正常运行。集合的类型参数使用的编译时契约只保证*集合中 中的任何内容都属于给定类型。它不关心你是否包含一个不同类型的对象。

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

答案 2 :(得分:0)

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