作者:沙尘jr暴的天下 | 来源:互联网 | 2022-12-10 13:33
鉴于这样一个类:
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> Andy Turner..:
这不是有效的实现equals
.
具体而言,它违反了及物性要求.
因此hashCode
,除了使所有实例具有相同的哈希码之外,您也无法实现"正确".
或者创建自己的类来为您执行这些操作,但不要假装是Set.
你不应该做那个抽象,而不是假装是一个`HashSet`或`Set`的东西.`Set`s应该只反映`equals`行为,_correct_,契约满足`equals`行为.
@mkohram扩展HashSet*从不*听起来像是正确的事情,特别是如果你正在改变现有方法的行为.