Junior — Middle
V ktorých situáciách je potrebné prepísať metódu equals v Jave pre správne porovnanie objektov?
sobes.tech AI
Odpoveď od AI
Metóda equals v jazyku Java by mala byť prepísaná, keď chcete definovať vlastné kritériá rovnosti objektov vašej triedy, odlišné od štandardného porovnania podľa odkazu (ktoré je implementované v Object).
Toto je obzvlášť dôležité, ak sú objekty vašej triedy logicky považované za rovnaké, keď určité polia zodpovedajú, napríklad v triede Person sú objekty považované za rovnaké, ak sa zhodujú meno a dátum narodenia.
Prepisovanie equals je nevyhnutné, aby:
- Správne porovnávalo objekty podľa obsahu.
- Zabezpečilo správne fungovanie kolekcií ako HashSet alebo HashMap, ktoré používajú equals na určenie jedinečnosti prvkov.
Pri prepisovaní equals je tiež dôležité prepísať hashCode, aby sa dodržal kontrakt medzi týmito metódami.
Príklad prepisovania equals a hashCode:
@Override
public boolean equals(Object obj) {
if (this == obj) return true;
if (obj == null || getClass() != obj.getClass()) return false;
Person person = (Person) obj;
return Objects.equals(name, person.name) && Objects.equals(birthDate, person.birthDate);
}
@Override
public int hashCode() {
return Objects.hash(name, birthDate);
}