hashCode():Objects.hash()和基类?

时间:2014-10-31 08:59:49

标签: java hash java-7 hashcode

假设我有两个班级

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));

1 个答案:

答案 0 :(得分:12)

我可能会使用

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

您肯定希望将您了解的状态与hashCode()的超类实现相结合,因此任何解决方案都希望使用bStrsuper.hashCode() ...您最初的添加想法当然也会起作用 - 它只是结合结果的另一种方式。