Нужны ли нам сгенерированные HyperJAXB методы hashCode & equals? - PullRequest
1 голос
/ 13 апреля 2010

Мы сгенерировали несколько (ну очень много) классов, используя HyperJAXB. Все классы реализуют Equals и HashCode и имеют стиль реализации ниже. Похоже, этот код никогда не выполняется .. есть ли какая-то конкретная причина, по которой нам нужен этот код? Я хочу упростить занятия, если сможем.

   public boolean equals(Object object) {
        if (!(object instanceof MyClass)) {
            return false;
        }
        if (this == object) {
            return true;
        }
        final EqualsBuilder equalsBuilder = new JAXBEqualsBuilder();
        equals(object, equalsBuilder);
        return equalsBuilder.isEquals();
    }

    public void hashCode(HashCodeBuilder hashCodeBuilder) {
        hashCodeBuilder.append(this.getValue());
        hashCodeBuilder.append(this.getId());
    }

    public int hashCode() {
        final HashCodeBuilder hashCodeBuilder = new JAXBHashCodeBuilder();
        hashCode(hashCodeBuilder);
        return hashCodeBuilder.toHashCode();
    }

Ответы [ 2 ]

5 голосов
/ 06 июля 2010

Вы можете использовать

<generateEquals>false</generateEquals>
<generateHashCode>false</generateHashCode>

в вашей конфигурации maven-hyperjaxb3-plugin, если вы хотите отключить генерацию методов equals / hashCode. Однако я не буду рекомендовать.

С уважением, «дизайнеры hyperjaxb3». :)

5 голосов
/ 13 апреля 2010

Если ваше приложение или инфраструктура JAXB когда-либо помещают экземпляры этих объектов в коллекции или карты, то есть большая вероятность, что методы equals и hashCode будут использоваться.

EDIT

Я нашел следующее в hyperjaxb3 документации :

Генерация методов equals и hashCode

Хотя это не является прямым требованием спецификации JPA, все же рекомендуется иметь правильные реализации методов equals и hashCode в классах сущностей. [...] С помощью Hyperjaxb3 вы можете настраивать, какие равные и будут использованы создатели хеш-кода [...] или выключать равные и генерировать hashCode.

Так что должна быть возможность отключить генерацию этих методов, но разработчики hyperjaxb3, похоже, говорят, что лучше этого не делать.

...