我目前有一个重写的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)方法并生成不违反合同的哈希码?
String.toLowerCase(Locale)
。否则,您将遇到“臭名昭著的土耳其语Locale错误”。 - Robert Tupelo-Schneck