Можно ли заставить eclipse генерировать hashCode и равняться с HashCodeBuilder и EqualsBuilder

Сгенерированный по умолчанию hashCode и реализации equals в лучшем случае уродливы.

Можно ли заставить eclipse генерировать их из HashCodeBuilder и EqualsBuilder и, возможно, даже toString с ToStringBuilder?

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
12
0
13 369
6
Перейти к ответу Данный вопрос помечен как решенный

Ответы 6

Ответ принят как подходящий

Взгляните на Commons4E

Он не обновлялся какое-то время, но я не думаю, что его нужно сильно менять?

Обновление: только что проверил 3.4.1, и он отлично работает.

Поскольку последнее обновление этого плагина датируется 2006 годом, он определенно не будет поддерживать Apache Commons Lang 3. Кстати, эта ссылка может быть более полезной: wiki.jiayun.org/Commons4E

Didier L 24.04.2012 18:31

Вы можете сделать это с помощью шаблонов кода в Eclipse.

Вот решение, который я нашел с примерами HashCodeBuilder и EqualsBuilder.

Шаблон EqualsBuilder:

    public boolean equals(Object o) {
        boolean result = false;

        if (this == o) {
            result = true;
        } else if (o instanceof $CLASSNAME$) {
            $CLASSNAME$ other = ($CLASSNAME$) o;

            result = new org.apache.commons.lang.builder.EqualsBuilder()
                    .append($END$
                    .isEquals();
        }

        return result;
    }

Шаблон HashCodeBuilder:

    public int hashCode() {
        return new org.apache.commons.lang.builder.HashCodeBuilder()
                .append( $END$ )
                .toHashCode();
    }

Какой шаблон кода это для eclipse или как создать новый?

daveb 11.11.2008 18:35

Пожалуйста, посмотрите этот пост о шаблонах кода (существующих и новых): eclipse.dzone.com/news/visual-guide-templates-eclipse

bruno conde 11.11.2008 18:56

$ CLASSNAME $ больше не работает с eclipse 3.4; новая переменная - $ {enclosing_type}. другие $ .. $ также должны быть заменены.

yanchenko 26.01.2009 04:05

Хорошее решение. Будет ли он использовать все переменные.

fastcodejava 31.03.2010 17:29

Обновите ссылку, чтобы она указывала на конкретную статью в блоге.

mR_fr0g 26.03.2012 15:22

Я использую плагин Eclipse под названием "Commonclipse"

После установки вы увидите новый пункт контекстного меню «commonclipse», щелкнув правой кнопкой мыши исходный файл java. Он может генерировать методы equals, hashcode, toString и compareTo на основе общих библиотек Apache.

Чтобы установить его, используйте это из обновления eclipse: http://commonclipse.sourceforge.net

Шаблоны Java-кода Eclipse для eclipse 3.5.0, производные от шаблонов Бруно Конде:

@Override
public boolean equals(Object obj) {
    if (obj == null) {
        return false;
    } else if (obj == this) {
        return true;
    } else if (obj.getClass() != this.getClass()) {
        return false;
    }

    ${enclosing_type} other = (${enclosing_type}) obj;
    return new EqualsBuilder()//
            .appendSuper(super.equals(other))//
            .append(${cursor})//
                .isEquals();
}

и

@Override
public int hashCode() {
    return new HashCodeBuilder(${cursor})//
            .append()//
            .toHashCode();
}

Вы можете настроить Eclipse для генерации toString() с помощью специального построителя. В нашем случае ToStringBuilder от Apache Commons Lang. Вы можете увидеть здесь http://azagorneanu.blogspot.com/2011/08/how-to-generate-equals-hashcode.html, как это сделать.

Это сообщение в блоге также содержит шаблоны Eclipse для создания equals(), hashCode() и compareTo() с использованием построителей Apache Commons Lang.

Я сделал этот шаблон, проверив несколько ответов, веб-сайтов и протестировав его на Eclipse Luna. Перейдите в Windows-> Preferences, а затем в Java-> Editor-> Templates и добавьте его туда.

${:import(org.apache.commons.lang3.builder.HashCodeBuilder, org.apache.commons.lang3.builder.EqualsBuilder)}
@Override
public int hashCode() {
    HashCodeBuilder hashCodeBuilder = new HashCodeBuilder();
    hashCodeBuilder.append(${field1:field});
    hashCodeBuilder.append(${field2:field});
    hashCodeBuilder.append(${field3:field});
    hashCodeBuilder.append(${field4:field});
    hashCodeBuilder.append(${field5:field});
    return hashCodeBuilder.toHashCode();
}

@Override
public boolean equals(Object obj) {
    if (this == obj) {
        return true;
    }
    if (obj == null) {
        return false;
    }
    if (getClass() != obj.getClass()) {
        return false;
    }
    ${enclosing_type} rhs = (${enclosing_type}) obj;
    EqualsBuilder equalsBuilder = new EqualsBuilder();
    equalsBuilder.append(${field1}, rhs.${field1});
    equalsBuilder.append(${field2}, rhs.${field2});
    equalsBuilder.append(${field3}, rhs.${field3});
    equalsBuilder.append(${field4}, rhs.${field4});
    equalsBuilder.append(${field5}, rhs.${field5});${cursor}
    return equalsBuilder.isEquals();
}

Другие вопросы по теме