列出<E> .contains(对象),为什么?

Hil*_*kus 7 java generics

可能重复:
Map.get(Object key)不是(完全)泛型的
原因是什么我们为什么要包含(Object o)而不是contains(E e)?

正如大家都可以看到的那样,类型为E的模板化java.util.List的contains方法没有模板化:它Object取而代之.有谁知道为什么?
在什么情况下会List<String>返回真实的myList.contains(new OtherNonString())?如果我没有弄错,永远不会,除非它被比较的对象具有类型E作为祖先(在我的字符串示例中由于String是最终的不可能)

是否只是为了保持与仿制前版本的向后兼容性?我错过了一个有意义的用例吗?如果它只是为了向后兼容,为什么不弃用contains(Object)并创建一个contains(E)

编辑:
我之前的一些子问题已得到解答.作为参考,也请检查这个问题

Sea*_*oyd 6

如果只是为了向后兼容,为什么不弃用contains(Object)并创建一个contains(E)?

因为contains(Object)并且contains(E)具有相同类型的擦除(如您在此代码示例中所见),因此会导致编译错误.此外,弃用方法不是一种选择,当时的首要任务是使遗留代码工作.

  • 根据API 1.4,List包含一个方法add(Object),该方法已更改为使用泛型.所以我不认为这就是它没有改变的原因.此方法签名是故意维护的. (2认同)