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