为什么我使用哈希码构建器为2个相等的对象获取不同的哈希码值?

时间:2012-09-13 21:56:08

标签: java groovy

我在这里做错了什么?

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

1 个答案:

答案 0 :(得分:12)

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

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

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