5

我在这里做错了什么?

        @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()
4

1 回答 1

12

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

现在奇怪的是,它们被记录为在我链接到的 JavaDoc 版本中返回相同的内容。所以我想知道你是否有一个旧版本 - 或者你可能正在使用一个完全不同的版本HashCodeBuilder......

编辑:HashCodeBuilder.hashCode()是的,在 2.5+ 版本中被覆盖为 return toHashCode(),但是 OP 使用的是 2.3 版本,它不能那样工作。

于 2012-09-13T21:58:05.473 回答