我在这里做错了什么?
@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()
答案 0 :(得分:12)
我怀疑问题在于您是在调用hashCode()
而不是toHashCode()
,假设您正在使用commons-lang HashCodeBuilder。换句话说,你得到了构建器本身的哈希码,而不是它正在构建的哈希码:)
现在奇怪的是,它们被记录为在我链接到的JavaDoc版本中返回相同的内容。所以我想知道你是否有一个旧版本 - 或者你可能完全使用完全不同的HashCodeBuilder
......
编辑:是的,HashCodeBuilder.hashCode()
在版本2.5+中被覆盖以返回toHashCode()
,但是OP使用的是版本2.3,但这不起作用。