Comment redéfinir equals() pour tester l'égalité structurelle entre objets ?
@Override public boolean equals(Object o), en castant o vers la classe cible dans un try/catch(ClassCastException), puis en comparant les champs pertinentsSavoir redéfinir equals() pour tester l'égalité structurelle entre deux objets en comparant leurs champs.
Savoir redéfinir equals() pour tester l'égalité structurelle entre deux objets en comparant leurs champs.
La signature correcte est public boolean equals(Object o) (avec Object, pas le type de la classe) ; un cast dans try/catch permet d'accéder aux champs tout en gérant les types incompatibles.
@Override public boolean equals(Object o) { ... } — la signature doit prendre un Object, pas le type de la classe.try { }, caster o vers la classe : MaClasse that = (MaClasse) o;return this.champ1 == that.champ1 && ...catch (ClassCastException e) { return false; } pour retourner false si o n'est pas du bon type.Redéfinir equals() dans Point (champs int x, int y) pour que deux points soient égaux si et seulement si ils ont les mêmes coordonnées.
@Override public boolean equals(Object o) { ... } — la signature doit prendre un Object, pas le type de la classe.Signature correcte : prend Object (pas Point) pour bien redéfinir Object.equals.
class Point {
final int x, y;
Point(int x, int y) { this.x=x; this.y=y; }
@Override
public boolean equals(Object o) {
// ...
}
}
try { }, caster o vers la classe : MaClasse that = (MaClasse) o;Caster o vers Point dans un bloc try.
@Override
public boolean equals(Object o) {
try {
Point that = (Point) o;
// ...
}
}
return this.champ1 == that.champ1 && ...Comparer les champs x et y.
try {
Point that = (Point) o;
return this.x == that.x && this.y == that.y;
}
catch (ClassCastException e) { return false; } pour retourner false si o n'est pas du bon type.Gérer ClassCastException.
@Override
public boolean equals(Object o) {
try {
Point that = (Point) o;
return this.x == that.x && this.y == that.y;
} catch (ClassCastException e) {
return false;
}
}
Point p1 = new Point(3, 4);
Point p2 = new Point(3, 4);
System.out.println(p1.equals(p2)); // true
System.out.println(p1.equals("abc")); // false
equals() retourne true si x et y sont identiques, false sinon (ou si o n'est pas un Point).
Redéfinir equals() dans Etudiant (String nom, int promo) pour que deux étudiants soient égaux s'ils ont le même nom ET la même promo.
Expliquer pourquoi public boolean equals(Point that) ne redéfinit PAS Object.equals() et les conséquences.
Crée ton compte gratuit pour accéder à la fiche et aux exercices