假设我有两个班级
class A {
private String aStr;
@Override
public int hashCode() {
return Objects.hash(aStr);
}
}
和
class B extends A {
private String bStr;
@Override
public int hashCode() {
return Objects.hash(bStr);
}
}
由于类A
的字段仍然是B
中需要进行哈希处理的字段,如何在A
B.hashCode()
中正确包含字段的哈希码}?这些中的任何一个?
Objects.hash(bStr) + super.hashCode();
// these generate a StackOverflowError:
Objects.hash(bStr, (A) this);
Objects.hash(bStr, A.class.cast(this));
答案 0 :(得分:12)
我可能会使用
Objects.hash(bStr, super.hashCode())
您肯定希望将您了解的状态与hashCode()
的超类实现相结合,因此任何解决方案都希望使用bStr
和super.hashCode()
...您最初的添加想法当然也会起作用 - 它只是结合结果的另一种方式。