[Lire Java efficace] Chapitre 3 Point 8 "En cas de remplacement égal, suivez le contrat général"

À propos du chapitre 3

Le chapitre 2 était l'essence même de la création et de la disparition d'objets. Le chapitre 3 concerne la classe "Object".

Contrat général avec classe Object

-Object est principalement conçu pour être étendu même s'il s'agit d'une classe concrète · Toutes les méthodes non finales (equals, hashCode, toString, clone, finalize) sont conçues pour être remplacées, elles ont donc un contrat général explicite. -Les classes de dépassement ne fonctionneront pas correctement à moins qu'elles ne soient conformes au contrat général

Suivez le contrat général lorsque vous remplacez les égaux

Si la méthode equals ne doit pas être remplacée

Remplacer la méthode equals est facile, mais c'est souvent la mauvaise façon de la remplacer, il est donc préférable de ne pas la remplacer si l'une des conditions suivantes est remplie:

· Lorsque les instances individuelles de la classe sont intrinsèquement uniques

· Si vous ne souhaitez pas savoir si la classe fournit un contrôle "d'égalité logique"

· Si la superclasse a déjà remplacé égal à égal et que le comportement de la superclasse est approprié pour cette classe

· Si la classe est privée ou package private et que vous êtes certain que sa méthode equals ne sera jamais appelée

Contrat général

Ce qui suit est le contrat général pour la méthode égale. Si cela n'est pas suivi, le programme se comportera de manière irrégulière ou plantera.

L'implémentation de la méthode equals implémente une relation d'équivalence. C'est, Réflexif: x.equals (x) doit retourner true pour toute valeur de référence non nulle x · Symétrique: x.equals (y) doit renvoyer vrai uniquement si y.equals (x) renvoie vrai pour toutes les valeurs de référence non nulles x et y. Transitive: pour toute valeur de référence non nulle x, y, z, si x.equals (y) et y.equals (z) retournent true, alors x.equals (z) Doit retourner vrai · Cohérent: pour toutes les valeurs de référence non nulles x et y, plusieurs appels à x.equals (y) sont cohérents d'un bout à l'autre, sauf si les informations utilisées pour comparer sont égales à l'objet ont changé. Doit renvoyer true ou renvoyer systématiquement false

Continuer

[Lire Java effectif] Chapitre 3 Rubrique 9 "Lors de la substitution d'égaux, toujours remplacer hashCode" https://qiita.com/Natsukii/items/ac195b5542ba3348ed29

Recommended Posts

[Lire Java efficace] Chapitre 3 Point 8 "En cas de remplacement égal, suivez le contrat général"
[Lire Java effectif] Chapitre 3 Rubrique 9 "Lors de la substitution d'égaux, toujours remplacer hashCode"
[Lire Java efficace] Chapitre 2 Item 7 "Eviter les finaliseurs"
[Lire Java efficace] Chapitre 2 Item 5 "Eviter la création d'objets inutiles"
[Lire Java efficace] Chapitre 3 Point 12 "Considérer l'implémentation de Comparable"
[Lire Java efficace] Chapitre 2 Item 6 "Supprimer les références d'objets obsolètes"
[Lire Java efficace] Chapitre 2 Item 4 "Forcer l'impossibilité d'immobilisation avec un constructeur privé"
[Lire le Java efficace] Chapitre 2 Item 2 "Considérez un constructeur face à un grand nombre de paramètres de constructeur"
Effective Java 3rd Edition Chapitre 9 Programme Général
[Lire Java efficace] Chapitre 2 Item 1 "Considérez les méthodes de fabrique statiques plutôt que les constructeurs"
Efficace Java Chapitre 2
Effective Java Chapitre 6 34-35
Effective Java Chapitre 4 15-22
Java efficace Chapitre 3
[Lire Java efficace] Chapitre 2 Item 3 "Forcer les caractéristiques de singleton avec un constructeur privé ou un type enum"