Как можно поддерживать hashCode / equals в соответствии с бизнес-определением класса?

Object Javadocs и Josh Bloch рассказывают нам о том, как должен быть реализован hashCode / equals, и хорошие IDE будут правильно обрабатывать поля различных типов. Некоторое обсуждение всего, что естьВот.

Этот вопрос о следующем шаге: как вы убедитесь, что ониоставаться хороший?

В частности, я считаю, что для большинства классов equals / hashCode должен быть реализован так, как предлагает Блох (и Eclipse и другие реализации IDE), и учитывать все непроизводные бизнес-логические поля в этом классе. Добавляя новые поля в класс как часть продолжающейся работы, люди часто забывают добавить их в реализацию equals / hashCode. Это может привести к трудно обнаруживаемым ошибкам, когда два объекта кажутся одинаковыми, но на самом деле отличаются значением недавно введенного поля.

Как команда (даже одна!) Может помочь обеспечить, чтобы equals / hashCode в классе продолжал принимать во внимание все соответствующие поля при изменении полей участника?

Я знаю, что Apache EqualsBuilder и HashCodeBuilder могут использовать рефлексию, которая, очевидно, будет учитывать правильные поля, но я хочу избежать затрат производительности при их использовании. Существуют ли другие подходы для пометки полей, которые не включены в equals / hashCode и должны быть? Статический анализ кода, возможности IDE, методы модульного тестирования?

Ответы на вопрос(6)

Ваш ответ на вопрос