Рекомендуется, а иногда и необходимо, классы, представляющие значения ( классы значений ) для переопределения hashCode()
, equals()
[и, необязательно, toString()
] методов.Значения, которые возвращают эти методы, зависят от всех или подмножеств переменных-членов класса и его суперкласса.Чтобы правильно их реализовать, вы должны знать немного теории о хешировании и немного алгебры и теории множеств (не слишком много, и почти все объясняется в javadocs дляэти методы и в форме Effective Java Джош Блох.)
В большинстве случаев реализация этих методов следует шаблону, а IDE (например, Eclipse JDT) включают инструменты для их генерации.Однако генераторы инструментов не могут делать какие-либо предположения и генерировать эти методы, используя только конструкции, доступные на языке и в стандартной библиотеке.Из-за этого эти методы обычно выглядят очень некрасиво.
Другим способом реализации этих методов является использование библиотеки, такой как Apache (commons-lang) HashCodeBuilder
, EqualsBuilder
и ToStringBuilder
.Используя эти утилиты, можно реализовать свои собственные hashCode()
и equals()
методы, которые выглядят намного лучше.
Мой вопрос касается объединения этих двух подходов.Я хотел бы иметь возможность настроить генераторы hashCode()
и equals()
в Eclipse, чтобы они генерировались с использованием HashCodeBuilder
и друзей.Возможно ли (и как) сделать это без настройки JDT?Только написание небольшого плагина, который будет переопределять реализации по умолчанию (но без изменения кода JDT).
Спасибо.