我正在创建一个类的子类,其中equals()
和hashCode()
为final
且基于标识。 (特别是XML DOM XOM与合同:
public final boolean equals(Object o)
Tests for Node/Element identity. That is, two Node/Element objects
are equal if and only if they are the same object.
Element
是可子类化的(例如
FooElement extends xom.nu.Element
我广泛使用它。我也开发了平等方法(例如
fooElementA.isEqualTo(fooElementB)
我想在创建集合和哈希映射时使用它。
我无法重写XOM库,也无法说服作者发布equals()
方法。是否有可以使用的通用解决方法(例如包装器,委托,子类化HashMap
等)?
注意:hashCode()
也是最终版。
答案 0 :(得分:4)
如果这是.NET,我建议你Dictionary
with a custom IEqualityComparer<T>
。在Java中,您需要将对象包装为实现hashCode
和equals
的{{3}}。
final class FooElementWrapper {
private final FooElement inner;
public FooElementWrapper(FooElement inner) {
this.inner = inner;
}
@Override
public int hashCode() {
return 0; // replace by a proper implementation!!!
}
@Override
public boolean equals(Object o) {
if(o instanceof FooElementWrapper) {
return this.isEqualTo((FooElementWrapper)o);
} else {
return false;
}
}
}
Set<FooElementWrapper>
现在应该完成这项工作。您绝对应该使用适用于hashCode
的公共变量的实现来重新实现FooElement
。
答案 1 :(得分:2)