Java 来自多个字段的hashCode
Java hashCode from multiple fields
给定一个 class 像这样:
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);
}
}
请注意,相等性不取决于两个字段是否匹配,任何一个字段都有效。对于此 class,什么是合适的 hashCode
实施?
这不是 equals
的有效实施。
具体来说,它违反了传递性要求。
因此,除了使所有实例具有相同的哈希码之外,您也无法实现 hashCode
"correctly"。
给定一个 class 像这样:
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);
}
}
请注意,相等性不取决于两个字段是否匹配,任何一个字段都有效。对于此 class,什么是合适的 hashCode
实施?
这不是 equals
的有效实施。
具体来说,它违反了传递性要求。
因此,除了使所有实例具有相同的哈希码之外,您也无法实现 hashCode
"correctly"。