可能是个愚蠢的问题,但我不想搞砸。假设我有两个 Java 类,Class1
and Class2
, where Class2 extends Class1
。我想覆盖Object.hashcode()
两个类都使用番石榴。对于超类,我有
@Override
public int hashCode() {
return Objects.hashcode(mField1, mField2);
}
对于 2 类,实现考虑 1 类成员的 hashcode() 的正确方法是什么?是这样吗?
@Override
public int hashcode() {
return Objects.hashcode(super.hashcode(), mField3, mField4);
}
这对我来说似乎是对的,但我正在寻找一些验证。 Joshua Bloch 在《Effective Java》中没有解决这种情况,Guava 文档也没有解决这种情况。
是的,这看起来是正确的。如果你有的话也会是一样的Objects.hashCode(f1, f2, f3, f4)
。如果你看一下实现,就会发现它是这样的result += 31 * result + hashcodeOfCurrentObject
。这意味着你的结果将是 31 + 超级哈希码,这不是exactly相同,但不会有问题。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)