В момента имам отменен 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(). Знам, че имам нужда от hashCode(), за да върна една и съща стойност за два обекта, ако те се считат за равни от метода equals(Object). Интуицията ми подсказва, че има някои случаи, когато този hashCode() ще наруши договора.
Има ли приемлив начин за използване на метода equalsIgnoreCase(String) в отменен метод equals(Object) и генериране на хешкод, който не нарушава договора?
Locale
по подразбиране, но винаги трябва да използватеString.toLowerCase(Locale)
с изричноLocale
. В противен случай ще се сблъскате с прословутата грешка в турския език. - person Robert Tupelo-Schneck   schedule 08.05.2013