来自多个字段的Java hashCode

时间:2018-07-17 16:43:48

标签: java oop equals hashcode

给出一个这样的类:

class MyObject {
  private String id1;
  private String id2;

  @Override
  public boolean equals(Object o) {
    if (o == this) return true;
    if (!(o instanceof MyObject)) {
        return false;
    }
    MyObject other = (MyObject) o;
    return id1.equals(other.id1) || id2.equals(other.id2);
  }
}

请注意,相等性不依赖于两个匹配的字段,两个字段都起作用。对于此类,hashCode的合适实现是什么?

1 个答案:

答案 0 :(得分:10)

这不是equals的有效实现。

具体来说,它违反了传递性要求。

这样,除了使所有实例具有相同的哈希码之外,您也无法“正确”实现hashCode