【问题标题】:When using the DelayQueue of Java, should I implement equals() and hashCode() as well?在使用Java的DelayQueue时,我是否也应该实现equals()和hashCode()?
【发布时间】:2011-12-09 14:13:48
【问题描述】:

我目前正在处理一个使用DelayQueue 的类。我注意到由于DelayQueue 中的对象实现了Delayed 接口,因此所述对象也需要实现compareTo() 方法,这已经完成。

这是否暗示我也应该考虑实现equals() 方法和hashCode() 方法?

我之所以问这个问题是因为我在通过FindBugs 搜索项目时偶然发现了this advice,我试图弄清楚这个特殊情况是否需要它。

【问题讨论】:

    标签: java static-analysis findbugs


    【解决方案1】:

    作为一种好的做法,是的,因为 equalshashCodecompareTo 具有密切的含义。它们可以看作是同一事物的不同方面。如果您的对象在其他地方使用而没有一起实现,您可能会遇到不可预知的行为。

    例如,您已将对象传递给使用二进制搜索算法的第 3 方库,它使用 compareTo。几个月后,新版本的库更改为基于散列的数据结构以提高性能,这依赖于equalshashCode。从他们的角度来看,这不是重大变化。

    在这种情况下,不,因为DelayQueue 不使用它们。

    【讨论】:

    • 很好的答案,肯定 +1。在阅读 Findbugs 对此的解释时,我想到的一件事是,这可能是 PriorityQueue 的问题,它在 Java 5 中使用 compareTo,但在 Java 6 中它使用 equals 代替。只是一个提示。 :)
    猜你喜欢
    • 2011-06-13
    • 2019-06-02
    • 1970-01-01
    • 2010-12-10
    • 1970-01-01
    • 2012-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多