Java 为什么使用HashCodeBuilder为两个相等的对象获取不同的hashcode值?
我做错了什么Java 为什么使用HashCodeBuilder为两个相等的对象获取不同的hashcode值?,java,groovy,Java,Groovy,我做错了什么 @Override public int hashCode() { HashCodeBuilder hashCodeBuilder = new HashCodeBuilder(); hashCodeBuilder.append(this.getId()).append(this.getDocFamilyUuid()) .append(
@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()
我怀疑问题在于您调用的是
hashCode()
,而不是toHashCode()
,假设您正在使用。换句话说,您得到的是构建器本身的哈希代码,而不是它正在构建的哈希代码:)
奇怪的是,在我链接到的JavaDoc版本中,它们被记录为返回相同的内容。所以我想知道你是否有一个旧版本,或者你可能正在使用一个完全不同的HashCodeBuilder
版本
编辑:是的,
HashCodeBuilder.hashCode()
在2.5+版本中被重写,返回toHashCode()
,但OP使用的是2.3版本,它不是那样工作的。请提供有关您使用的HashCodeBuilder的更多信息-哪个库,哪个版本。这绝对是至关重要的信息。萨特尔,但重要的区别…:)@埃里卡。布兰德·斯塔德莫恩:也许吧。这取决于我是否正确,这取决于知道OP使用的确切HashCodeBuilder@但你猜得很好,不是吗?事实证明你是对的。@Phoenix:好的-看起来hashCode
在2.5版中被重写,返回的值与toHashCode
相同。您是否考虑过升级到不到5年的版本?:)