【发布时间】:2013-11-12 10:19:22
【问题描述】:
我对使用EqualsVerifier 库的Java 中的equals 和hashCode 合约有一些疑问。
想象一下我们有这样的东西
public abstract class Person {
protected String name;
@Override
public boolean equals(Object obj) {
// only name is taken into account
}
@Override
public int hashCode() {
// only name is taken into account
}
}
还有以下扩展类:
public final class Worker extends Person {
private String workDescription;
@Override
public final boolean equals(Object obj) {
// name and workDescription are taken into account
}
@Override
public final int hashCode() {
// name and workDescription are taken into account
}
}
我尝试使用EqualsVerifier 测试我是否在Person 类中履行equals 和hashCode 合同
@Test
public void testEqualsAndHashCodeContract() {
EqualsVerifier.forClass(Person.class).verify();
}
运行这个测试,我知道我必须将equals 和hashCode 方法声明为final,但这是我不想做的事情,因为我可能想在扩展类中声明这两个方法, 因为我想在equals 和hashCode 中使用一些孩子的属性。
您能否跳过测试 EqualsVerifier 库中的最终规则?还是我错过了什么?
【问题讨论】:
标签: java equals hashcode final equalsverifier