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

标签 java hash java-7 hashcode

假设我有两个类(class)

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

最佳答案

我可能会用

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

您肯定希望将您知道的状态与 hashCode() 的父类(super class)实现相结合,因此任何解决方案都需要使用 bStrsuper。 hashCode()...当然,您最初的加法想法也行得通 - 它只是组合结果的一种不同方式。

关于java - hashCode() : Objects. hash() 和基类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26670773/

相关文章:

java - 在列表元素中保留泛型

java - AutoCloseable.close()方法是否违反了Java的向后兼容性规则

java - 文本在屏幕上不断滚动

java - ArrayList 与双倍数组大小?

java - Firebase Android : how do I access params nested in data via RemoteMessage?

java - 如何组成String keys以获得最均匀的hash code分布

java - GridView 显示在工具栏前面而不是下方

php - 我的身份验证加密有什么好处吗?

algorithm - 确定散列函数

Java 7 字符串 - 子字符串复杂度