EqualsVerifierライブラリを使用して Javaequalsで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クラスでequalsandhashCode契約を満たしているかどうかをテストしようとしています
@Test
public void testEqualsAndHashCodeContract() {
EqualsVerifier.forClass(Person.class).verify();
}
このテストを実行すると、最終的なメソッドを宣言するequals必要hashCodeがあることがわかりますが、子の属性を使用したいので、拡張クラスでこれら 2 つのメソッドを宣言したい場合があるため、これはやりたくないことです。とequalsでhashCode。
EqualsVerifier ライブラリの最終ルールのテストを飛ばしていただけますか? または、何か不足していますか?