Comparaison complète de deux objets par introspection


Description

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 ;-)

Codes Sources

A voir également

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.