我在这里做错了什么?

        @Override
        public int hashCode()
        {
            HashCodeBuilder hashCodeBuilder = new HashCodeBuilder();
            hashCodeBuilder.append(this.getId()).append(this.getDocFamilyUuid())
                           .append(this.getCorrelationId());

            return hashCodeBuilder.hashCode();
        }

这就是我在Groovy中创建对象的方式。字段被设置为静态常量
DocInfo docInfo =  new DocInfo(id:DOC_ID, correlationId: CORRELATION_ID, docFamilyUuid: DOC_FAMILY_UUID)

我试图断言
assert docInfo.hashCode() ==
           new DocInfo([id:DOC_ID,
                   correlationId: CORRELATION_ID,
                   docFamilyUuid:DOC_FAMILY_UUID]).hashCode()

最佳答案

我怀疑问题是,假设您使用的是commons-lang HashCodeBuilder,那么您是在调用hashCode()而不是toHashCode()。换句话说,您将获得构建器本身的哈希码,而不是其正在构建的哈希码:)

现在奇怪的是,据记载它们在我链接到的JavaDoc版本中返回相同的东西。所以我想知道您是否有旧版本-或者您是否正在使用完全不同的HashCodeBuilder ...

编辑:是的,HashCodeBuilder.hashCode()在版本2.5+中被覆盖以返回toHashCode(),但是OP使用的是版本2.3,这种方式不起作用。

09-27 23:50