Devriez-vous utiliser 'getClass()' ou 'instanceof' dans votre méthode .equals() ?
Lors de la génération de .equals() méthodes utilisant Eclipse, vous avez la possibilité d’utiliser « instanceof » ou « .getClass() » pour comparer les types. Par défaut, Eclipse utilise « .getClass() », ce qui laisse de nombreux programmeurs se demander s'ils doivent passer à « instanceof ».
Quelle est la différence ?
.getClass() compare directement le type d'exécution de deux objets, tandis que instanceof vérifie si un L'objet est une instance d'une classe ou d'une interface particulière. Par exemple :
if (getClass() != obj.getClass()) // Using getClass() if (!(obj instanceof MyClass)) // Using instanceof
Laquelle devriez-vous utiliser ?
Selon l'expert Java Josh Bloch, « instanceof » est l'approche préférée car elle ne restreint pas égalité avec le même type d’exécution. Cela signifie que vous pouvez étendre une classe et ajouter des méthodes sans affecter l'égalité des objets partageant les mêmes aspects importants.
De plus, cela s'aligne sur le principe de substitution de Liskov, qui stipule qu'une sous-classe doit pouvoir être utilisée à la place de sa superclasse sans casser le code. L'utilisation de '.getClass()' viole ce principe, entraînant un comportement inattendu dans des collections comme HashTable.
En résumé, 'instanceof' offre plus de flexibilité et est recommandé pour les méthodes .equals(). Bien que vous puissiez supprimer la vérification « if (obj == null) » avec « instanceof », il est généralement conseillé de la conserver pour plus de clarté et d'exhaustivité.
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!