假设我有两种类型A
,并且B
都有一个唯一的id
字段,这就是我通常如何实现 equals() 和 hashCode() 方法:
@Override
public boolean equals(Object obj) {
return obj instanceof ThisType && obj.hashCode() == hashCode();
}
@Override
public int hashCode() {
return Arrays.hashCode(new Object[] { id });
}
在这种情况下,鉴于A
两者B
都有一个 1-arg 构造函数来设置各自的id
字段,
new A(1).equals(new A(1)) // prints true as expected,
new A(1).equals(new A(2)) // prints false as expected,
new A(1).equals(new B(1)) // prints false as expected.
但是也,
new A(1).hashCode() == new B(1).hashCode() // prints true.
我想知道两个 hashCodes 是否相等是否重要,即使这两个对象不是来自同一类型?hashCode() 可以在 equals() 之外的其他地方使用吗?如果是,目的是什么?
我考虑实现以下两种方法:
@Override
public boolean equals(Object obj) {
return obj != null && obj.hashCode() == hashCode();
}
@Override
public int hashCode() {
return Arrays.hashCode(new Object[] { getClass(), id });
}
将类添加到 hashCode 生成将解决这个潜在的问题。你怎么看?有必要吗?