我目前有一个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) 方法认为两个对象相等,我需要 hashCode() 返回相同的值。我的直觉告诉我在某些情况下这个 hashCode() 会违反合同。
是否有一种可接受的方式在覆盖的 equals(Object) 方法中使用 equalsIgnoreCase(String) 方法并生成不违反合同的哈希码?