Patrón: objetos iguales si son iguales algunos campos
A menudo la equivalencia
no tiene más ciencia que decir que dos objetos son equivalentes si lo son
algunos de sus campos.
Ejemplo, sean
objetos que son coches
public class Coche {
private String marca;
private String modelo;
private int puertas;
private int km;
private Color color;
Si queremos definir
como iguales dos coches con igual marca, modelo y número de puertas:
@Override
public boolean
equals(Object x) {
if (x == this) return true;
if (x == null) return false;
if (!(x instanceof Coche)) return false;
Coche otro = (Coche) x;
if (puertas != otro.puertas) return false;
if (!marca.equals(otro.marca)) return false;
if (!modelo.equals(otro.modelo)) return
false;
return true;
}
Si queremos tener en
cuenta que alguno de los campos que son objeto pueda ser nulo:
@Override
public boolean
equals(Object x) {
if (x == this) return true;
if (x == null) return false;
if (!(x instanceof Coche)) return false;
Coche otro = (Coche) x;
if (puertas != otro.puertas) return false;
if (marca == null) {
if (otro.marca != null) return false;
} else {
if (!otro.marca.equals(marca)) return
false;
}
if (modelo == null) {
if (otro.modelo != null) return false;
} else {
if (!otro.modelo.equals(modelo)) return
false;
}
return true;
}
Regla: si redefine equals(), debe redefinir hashCode().
Temas relacionados
63. equals (método) public boolean equals(Object)