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