При использовании DelayQueue Java, я должен также реализовать equals () и hashCode ()? - PullRequest
1 голос
/ 09 декабря 2011

В настоящее время я имею дело с классом, который использует DelayQueue. Я заметил, что поскольку объекты в DelayQueue реализуют интерфейс Delayed, в указанных объектах также должен быть реализован метод compareTo(), что уже было сделано.

Значит ли это, что я также должен рассмотреть возможность реализации метода equals() и hashCode()?

Причина, по которой я спрашиваю, состоит в том, что я наткнулся на этот совет при поиске в проекте с помощью FindBugs , и я пытаюсь понять нужно ли это или нет для этого конкретного случая.

1 Ответ

8 голосов
/ 09 декабря 2011

Как хорошая практика, да, поскольку equals, hashCode и compareTo имеют близкие значения.Их можно рассматривать как разные аспекты одного и того же.Если ваш объект используется где-то еще, не реализовав их вместе, вы можете столкнуться с непредсказуемым поведением.

Например, вы передали свой объект в стороннюю библиотеку, которая использует алгоритм двоичного поиска, он использует compareTo.Несколько месяцев спустя новая версия библиотеки была изменена на хешированную структуру данных для повышения производительности, которая ретранслируется на equals и hashCode.С их точки зрения, это не нарушает изменения。

Как и в этом случае, нет, поскольку DelayQueue не использует их.

...