Объект javadocs и Джош Блох рассказывают нам о том, как hashCode/equals должны быть реализованы, а хорошие IDE будут корректно обрабатывать поля разных типов. Некоторые обсуждения обо всем этом здесь.
Этот вопрос касается следующего шага: как вы убедитесь, что они остаются хорошими?
В частности, я считаю, что для большинства классов equals/hashCode должен быть реализован, как предлагает Bloch (и Eclipse и другая реализация IDE), и принять во внимание все не производные, бизнес-логические поля этого класса. Добавляя новые поля к классу как часть продолжающейся работы, люди часто забывают добавить их в реализацию equals/hashCode. Это может привести к труднодоступным ошибкам, когда два объекта кажутся равными, но на самом деле отличаются значением недавно введенного поля.
Как команда (даже одна!) поможет убедиться, что equals/hashCode в классе продолжает принимать во внимание все соответствующие поля, поскольку поля членов изменяются?
Я знаю, что Apache EqualsBuilder и HashCodeBuilder могут использовать отражение, которое, очевидно, потребуется для учета правильных полей, но я хочу избежать затрат на их использование. Существуют ли другие подходы к пометке полей, которые не включены в equals/hashCode, и должно быть? Анализ статического кода, функции IDE, методы unit test?