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

Pho*_*nix 5 java groovy

我在这做错了什么?

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

            return hashCodeBuilder.hashCode();
        }
Run Code Online (Sandbox Code Playgroud)

这就是我在groovy中创建对象的方式.字段被设置为静态常量

DocInfo docInfo =  new DocInfo(id:DOC_ID, correlationId: CORRELATION_ID, docFamilyUuid: DOC_FAMILY_UUID)
Run Code Online (Sandbox Code Playgroud)

而我正试图断言

assert docInfo.hashCode() ==
           new DocInfo([id:DOC_ID,
                   correlationId: CORRELATION_ID,
                   docFamilyUuid:DOC_FAMILY_UUID]).hashCode()
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 12

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

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

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