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