我对使用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
方法最终,但这是我不想做的事情,因为我可能想在扩展类中声明这两个方法,因为我想使用一些孩子的属性在equals
和hashCode
。
您可以跳过测试 EqualsVerifier 库中的最终规则吗?还是我错过了什么?