我在这里做错了什么?
@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()
最佳答案
我怀疑问题是,假设您使用的是commons-lang HashCodeBuilder,那么您是在调用hashCode()
而不是toHashCode()
。换句话说,您将获得构建器本身的哈希码,而不是其正在构建的哈希码:)
现在奇怪的是,据记载它们在我链接到的JavaDoc版本中返回相同的东西。所以我想知道您是否有旧版本-或者您是否正在使用完全不同的HashCodeBuilder
...
编辑:是的,HashCodeBuilder.hashCode()
在版本2.5+中被覆盖以返回toHashCode()
,但是OP使用的是版本2.3,这种方式不起作用。