Le code déposé ici expose une méthode
boolean deepEquals(Object obj1, Object obj2)
qui va explorer pour chaque objet chacun de ses champs et les comparer soit directement s'il s'agit d'un type primitif, soit récursivement s'il s'agit d'un objet.
Le résultat de la méthode sera donc
true si la totalité des types primitifs composant les deux objets sont égaux et
false si au moins un de ces champs diffère.
Remarque : La méthode
equals défini dans la classe
Object compare déjà deux objets mais uniquement sur une portion des champs de la classe. Ainsi la méthode
equals peut renvoyer
true et la méthode
deepEquals renvoyer
false à cause d'un champ différent, non utilisé dans la méthode
equals. En revanche si
deepEquals renvoie
true alors la méthode
equals renverra également
true vu que tous les champs qu'elle utilisera seront identiques.
Ce code peut être utilisé comme une illustration de l'introspection en Java. Cependant je déconseille de l'utiliser "en vrai" dans un projet, car l'utilisation intensive de l'introspection peut réduire les performances des programmes.
Remarque : j'ai accompagné le code de la classe par un code de tests JUnit qui s'assure que tous les cas (auxquels j'ai pensé) sont bien gérés. S'il y a des cas auxquel je n'aurai pas pensé et qui ne fonctionne pas vous pouvez m'indiquer le test JUnit correspondant pour que je corrige le code ;-)
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.