equals(Object)
現在、次のようなオーバーライドがあります。
@Override
public boolean equals(Object o) {
if (o == this) return true;
if (! (o instanceof Player)) return false;
Player p = (Player) o;
return getFirstName().equalsIgnoreCase(p.getFirstName()) &&
getLastName().equalsIgnoreCase(p.getLastName());
}
私hashCode()
は現在次のように見えます:
@Override
public int hashCode() {
int result = 17;
result = 31 * result + getFirstName().toLowerCase().hashCode();
result = 31 * result + getLastName().toLowerCase().hashCode();
return result;
}
私の質問は、オーバーライドされたhashCode()メソッドに関するものです。equals(Object)メソッドによって2つのオブジェクトが等しいと見なされた場合、2つのオブジェクトに同じ値を返すにはhashCode()が必要であることを知っています。私の腸は、このhashCode()がコントラクトに違反する場合があると言っています。
オーバーライドされたequals(Object)メソッドでequalsIgnoreCase(String)メソッドを使用し、コントラクトに違反しないハッシュコードを生成するための許容可能な方法はありますか?