1

我们已经使用 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();
    }
4

2 回答 2

5

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

编辑

我在hyperjaxb3 文档中找到了以下内容:

生成 equals 和 hashCode 方法

虽然这不是 JPA 规范直接要求的,但仍然建议在实体类中正确实现 equals 和 hashCode 方法。[...] 使用 Hyperjaxb3,您可以配置,将使用哪个 equals 和 hashCode 构建器 [...] 或关闭 equals 和 hashCode 生成。

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

于 2010-04-13T11:24:34.720 回答
5

您可以使用

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

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

此致,“hyperjaxb3 设计师”。:)

于 2010-07-06T07:46:59.590 回答