Maison >Java >javaDidacticiel >Pourquoi la surcharge de la méthode `equals()` de Java interrompt-elle la fonctionnalité `ArrayList` ?
Méthode de remplacement de la méthode equals() de Java : pièges et solutions
Lors d'une rencontre récente, un développeur a découvert un problème déroutant avec les égal(s) remplacés( ) méthode en Java. Le problème est survenu lorsqu'un objet Book a été créé avec uniquement son ID et transmis à la méthode equals().
Surcharge ou remplacement
La méthode equals() de Java est hérité de la classe Object en tant que public boolean equals(Object other);. Le remplacement se produit lorsque la signature de la méthode (y compris le type du paramètre) correspond exactement à la méthode de la superclasse. En revanche, la surcharge implique la création de méthodes portant le même nom mais des types de paramètres différents.
Dans ce cas, le développeur a initialement implémenté une version surchargée d'equals() qui prenait un paramètre Book au lieu d'un paramètre Object.
La dépendance d'ArrayList à l'égard des égaux remplacés()
ArrayList, qui a été utilisée dans le programme du développeur code, exploite les méthodes égal à () remplacées pour la comparaison de contenu. Bien que la méthode surchargée equals() fonctionne bien dans la plupart des scénarios, elle a rencontré des problèmes de compatibilité avec ArrayList.
Cause du problème
Le problème provenait du fait que le La méthode equals() surchargée n'a pas pu correspondre à la signature de la méthode equals(Object) remplacée. Par conséquent, ArrayList a utilisé l'implémentation par défaut d'Object, qui n'effectue pas de comparaison d'objets.
Solution : remplacer correctement equals()
Pour résoudre le problème, le développeur a corrigé la méthode equals() substituée pour prendre un paramètre Object, assurant la compatibilité avec ArrayList :
@Override public boolean equals(Object other) { if (other == null) return false; if (other == this) return true; if (!(other instanceof Book)) return false; Book otherBook = (Book) other; ...test other properties here... }
L'utilisation du L'annotation @Override aide à détecter les remplacements inappropriés lors de la compilation.
Conclusion
Cette expérience met en évidence l'importance d'adhérer aux conventions de substitution de méthodes Java lors de l'extension des classes. Une surcharge peut entraîner des problèmes de compatibilité, en particulier lorsque vous travaillez avec la méthode equals() et des collections telles que ArrayList. Une substitution de méthode appropriée garantit la cohérence et évite les comportements imprévisibles.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!