ho attualmente ottenuto un sovrascritto equals(Object)
che assomiglia a questo:hashCode Override con eguali ignorate utilizzando equalsIgnoreCase per verificare l'uguaglianza
@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());
}
mio hashCode()
attualmente si presenta così:
@Override
public int hashCode() {
int result = 17;
result = 31 * result + getFirstName().toLowerCase().hashCode();
result = 31 * result + getLastName().toLowerCase().hashCode();
return result;
}
La mia domanda è riguardo il mio metodo hashCode() sovrascritto. So che ho bisogno di hashCode() per restituire lo stesso valore per due oggetti se sono considerati uguali dal metodo equals (Object). Il mio istinto mi dice che c'è del caso in cui questo hashCode() viola il contratto.
Esiste un modo accettabile di utilizzare il metodo equalsIgnoreCase (String) in un metodo equals (Object) sovrascritto e generare un hashcode che non violi il contratto?
In hashCode() result = 31 ... dovrebbe essere risultato * = 31 ... in modo da non perdere il valore già in là. – Patashu
Ha ottenuto l'equazione, 31 * risultato + (altri oggetti). Quindi non è perso. Solo i miei 2 centesimi, ma penso che tu stia andando nel modo giusto. Il tuo metodo per i pari vale per me. – Kyle
Perché il tuo codice viola il contratto? Il tuo istinto deve essere nervoso, non ascoltarlo;) – ddmps