Comparaison complète de deux objets par introspection

Soyez le premier à donner votre avis sur cette source.

Vue 4 337 fois - Téléchargée 402 fois


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

Ajouter un commentaire

Commentaires

gerse87
Messages postés
4
Date d'inscription
lundi 24 octobre 2011
Statut
Membre
Dernière intervention
24 octobre 2014
-
Bonjour. J'ai une question, est-il possible de comparer deux sauvegardes d'une base de donnes SQL de cette façon, en java swing? Si vous le pensez, pourriez-vous m'indiquer une façon de procéder? Merci
KX
Messages postés
16075
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
15 novembre 2019
88 > gerse87
Messages postés
4
Date d'inscription
lundi 24 octobre 2011
Statut
Membre
Dernière intervention
24 octobre 2014
-
En Swing tu vas avoir des attributs privés différents pour certains objets qui seront égaux. Du coup même si les données sauvegardées sont identiques, les objets Swing pourront être partiellement différents.
Dans ton cas la méthode equals devrait suffire.
gerse87
Messages postés
4
Date d'inscription
lundi 24 octobre 2011
Statut
Membre
Dernière intervention
24 octobre 2014
-
Merci KX.

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.