代码之家  ›  专栏  ›  技术社区  ›  Marcus Leon

我们需要hyperjaxb生成的hashcode&equals方法吗?

  •  1
  • Marcus Leon  · 技术社区  · 14 年前

    我们已经使用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 回复  |  直到 14 年前
        1
  •  5
  •   Stephen C    14 年前

    如果应用程序或JAXB基础结构曾经将这些对象的实例放入集合或映射中,那么 equals hashCode 方法 被使用。

    编辑

    我在 hyperjaxb3 documentation :

    生成equals和hashcode方法

    尽管JPA规范没有直接要求这样做,但仍然建议在实体类中正确实现equals和hashcode方法。使用hyperjaxb3可以配置“…”,它等于和散列代码生成器将被使用“…”,或者关闭“等于”和“散列代码生成”。

    所以应该可以关闭这些方法的生成,但是hyperjaxb3的设计者似乎说最好不要这样做。

        2
  •  5
  •   lexicore    14 年前

    你可以使用

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

    在maven-hyperjaxb3-plugin配置中,如果要禁用equals/hashcode方法生成。但我不推荐。

    谨致问候,“hyperjaxb3设计师”。:)

    推荐文章