2011-12-09 33 views
1

我目前正在处理一个使用DelayQueue的类。我注意到由于DelayQueue中的对象实现了Delayed接口,所以上述对象也需要实现compareTo()方法,该方法已经完成。当使用Java的DelayQueue时,我是否应该实现equals()和hashCode()?

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

为什么我问的原因是因为我通过FindBugs通过项目搜索时偶然发现this advice,和我想无论是需要或者不进行这种特殊情况弄清楚。

回答

8

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

例如,您已将您的对象传递给使用二分搜索算法的第三方库,它使用compareTo。几个月后,库变化的新版本基于散列的数据结构,以提高性能,这对继电器和equalshashCode。从他们的观点来看,这不是重大更改。

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

+0

很好的答案,肯定+1。有一件事我反映在同时通过这个FindBugs的解释理解是,这可能是时Queue,它使用的compareTo Java 5中的一个问题,但在Java 6中使用它,而不是相等。只是单挑。 :) –

相关问题