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

問題は、 commons-lang HashCodeBuilderを使用していると仮定して、hashCode()ではなく呼び出していることだと思います。言い換えれば、ビルダーが構築しているハッシュコードではなく、ビルダー自体のハッシュコードを取得しているということです:)toHashCode()

奇妙なことに、私がリンクしたバージョンのJavaDocで同じものを返すように文書化されています。だから、あなたは古いバージョンを持っているのだろうか、それともまったく異なるものを使っているのだろうかHashCodeBuilder...

編集:うん、バージョン2.5以降でHashCodeBuilder.hashCode()はオーバーライドされて戻りtoHashCode()ますが、OPはバージョン2.3を使用しているため、そのようには機能しません。

于 2012-09-13T21:58:05.473 に答える