【问题标题】:Java List interface contains(Object o) method signature [duplicate]Java List接口包含(Object o)方法签名[重复]
【发布时间】:2012-10-15 02:40:01
【问题描述】:

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

Java Collection<E> 接口有一个contains 方法,其签名如下:

boolean contains(Object o)

由于接口是泛型的,类型为E,所以签名不应该是
boolean contains(E o)

反映这一点并且只允许E类型的参数。

关于remove(Object o) 方法可以问同样的问题

【问题讨论】:

标签: java interface


【解决方案1】:

containsremove 方法接受任何对象,因为它们接受(并且可以成功)可能不是 E 实例的对象。 contract for contains 是:

当且仅当此集合包含至少一个元素 e 满足 (o==null ? e==null : o.equals(e)) 时返回 true

请注意,o 实际上不必是集合中的对象;它必须只通过equals 测试。

remove 也有同样的想法。

另见this thread,其中指出将containsremove 设为通用会破坏许多现有的、完全有效的代码。

【讨论】:

    猜你喜欢
    • 2015-11-06
    • 2014-01-04
    • 1970-01-01
    • 2022-08-17
    • 2020-11-08
    • 2019-08-22
    • 2020-11-07
    • 2020-09-23
    • 2016-04-19
    相关资源
    最近更新 更多