hashCode(): Objects.hash() 和基类是什么?

10

假设我有两个类

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 中进行哈希的字段,我该如何正确地在 B.hashCode() 中包含 A 的字段的哈希码呢?以下哪种方式是正确的?
Objects.hash(bStr) + super.hashCode();
// these generate a StackOverflowError:
Objects.hash(bStr, (A) this);
Objects.hash(bStr, A.class.cast(this));
1个回答

20

我可能会使用

Objects.hash(bStr, super.hashCode())

你肯定想要将你已知的状态与超类的hashCode()实现结合起来,因此任何解决方案都会使用bStrsuper.hashCode()... 当然,你最初的加法思路也可以工作 - 这只是一种不同的组合结果的方式。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接