Maison >Java >javaDidacticiel >Devriez-vous utiliser `instanceof` ou `getClass()` dans la méthode `.equals()` de Java ?

Devriez-vous utiliser `instanceof` ou `getClass()` dans la méthode `.equals()` de Java ?

Linda Hamilton
Linda Hamiltonoriginal
2024-11-27 01:23:13236parcourir

Should You Use `instanceof` or `getClass()` in Java's `.equals()` Method?

Préférer instanceof à getClass() dans les implémentations .equals()

Lors de la génération de méthodes .equals() dans Eclipse, les développeurs se voient présenter le choix entre utiliser "getClass()" ou "instanceof" pour comparer les types d'objets. Bien qu'Eclipse utilise par défaut "getClass()", il est généralement préférable d'opter pour "instanceof" à la place.

Raisons de préférer instanceof

  • Adhésion au principe de substitution de Liskov : L'utilisation de "getClass()" restreint l'égalité des objets aux objets de la même classe exacte. Cela viole le principe de substitution de Liskov, qui stipule que les sous-classes doivent être substituables à leurs superclasses à tous égards. Par conséquent, l'utilisation de "getClass()" peut entraîner un comportement inattendu lors de la comparaison d'objets de classes différentes mais du même type logique.
  • Extensibilité améliorée : En utilisant "instanceof", le . La méthode equals() peut identifier correctement l’égalité entre les objets de différentes sous-classes. Cela permet une plus grande extensibilité et flexibilité dans le code, car de nouvelles sous-classes peuvent être introduites sans affecter les comparaisons d'égalité.

Meilleures pratiques pour les vérifications nulles

Concernant null vérifie, c'est en effet une bonne pratique de supprimer l'instruction "if (obj == null)" lors de l'utilisation de "instanceof". En effet, "instanceof" garantit que "obj" est une instance de la classe concernée et qu'un objet nul ne peut pas être une instance d'une classe.

Arguments à l'appui

Josh Bloch, l'auteur de "Effective Java", préconise l'utilisation de "instanceof" dans les implémentations .equals(). Il soutient que cela garantit le bon respect du principe de substitution de Liskov et évite tout comportement surprenant dans les collections qui reposent sur la méthode égale.

Un support supplémentaire pour cette approche peut être trouvé dans une réponse sur Stack Overflow et dans le troisième chapitre du livre de Bloch, "Java efficace."

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn