Как настроить hashCode () и equals (), сгенерированные Eclipse? - PullRequest
17 голосов
/ 06 июня 2011

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

Другим способом реализации этих методов является использование библиотеки, такой как Apache (commons-lang) HashCodeBuilder, EqualsBuilder и ToStringBuilder.Используя эти утилиты, можно реализовать свои собственные hashCode() и equals() методы, которые выглядят намного лучше.

Мой вопрос касается объединения этих двух подходов.Я хотел бы иметь возможность настроить генераторы hashCode() и equals() в Eclipse, чтобы они генерировались с использованием HashCodeBuilder и друзей.Возможно ли (и как) сделать это без настройки JDT?Только написание небольшого плагина, который будет переопределять реализации по умолчанию (но без изменения кода JDT).

Спасибо.

Ответы [ 2 ]

5 голосов
/ 07 июня 2011

Публикация моего комментария в качестве ответа на запрос: Commonclipse , плагин Eclipse, который облегчает использование Apache Commons, делает то, что вы хотите.

Предостережение: у меня нет недавнего опыта работы с этим плагином, поэтому я изначально разместил его как комментарий, а не как ответ.

2 голосов
/ 06 июня 2011

В настройках eclipse («Окно»> «Настройки») перейдите на страницу «Java»> «Редактор»> «Шаблоны».

Здесь вы можете создать шаблон с именем: контекст хеш-кода: описание java: создать метод хеш-кода.Шаблон должен содержать что-то вроде этого:

public int hashCode() {
    return HashCodeBuilder.reflectionHashCode(this);
}

Сохраните и вернитесь в свой класс Java.Введите имя (хэш-код) и нажмите Ctrl Enter.Затем вы можете выбрать свой шаблон из выпадающего списка.

Сделайте то же самое для каждого метода, который вы хотите.Вы также можете создать шаблон, который объединяет все вместе.

...