Bonjour,
Tout est dans le titre...
Existe t'il ce genre d'API.
J'ai donc 2 classes instanciées, et valorisées et je souhaite savoir si il y a des différences dans le contenu de leurs atributs.
Merci d'avance
Bonjour,
Tout est dans le titre...
Existe t'il ce genre d'API.
J'ai donc 2 classes instanciées, et valorisées et je souhaite savoir si il y a des différences dans le contenu de leurs atributs.
Merci d'avance
pourquoi ne pas surcharger la méthode "equals" ( ou une autre méthode ) portant sur les attributs intéressants ?
Il s'agit deux objets d'une même classe ou de deux classes différentes ? parce que dans ce cas la méthode equals ne marche pas (si c'est ce cas, peus-tu donner plus de détail avec éventuellement un peu de ton code).
Je ne répondrai à aucune question technique par MP.
Pensez aux Tutoriels et aux FAQs avant de poster ;) (pour le java il y a aussi JavaSearch), n'oubliez pas non plus la fonction Rechercher.
Enfin, quand une solution a été trouvée à votre problème pensez au tag :resolu:
Cours Dvp : http://ydisanto.developpez.com
Blog : http://yann-disanto.blogspot.com/
Page perso : http://yann-disanto.fr
au pire en passant par la réflexion, mais ça va être bourrin à coder
Il s'agit bien de la même classe , mais de 2 instances différentes à comparer.
La méthode equals est déjà surchargée et compare des attributs précis.
Dans mon cas , il me faudrait une méthode diff qui serait autrement codée.
Il y a bien sûr la solution par la reflexion, ou déclarer les champs à comparer, bref plusieurs solutions sont possibles.
Mais je me demandais si il n'existe pas déjà une API qui faisait ce genre de job ?
Merci d'avance
Sinon tu implémentes l'interface Comparable et tu fais des comparator... Ca peut peut être t'aider...
Je ne connais pas d'API pour cela, mais ce n'est pas bien compliqué avec la reflection :
Code Java : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 public static <T> boolean hasAllFieldsEquals(Class<T> parentClass, T t1, T t2) throws IllegalArgumentException, IllegalAccessException { for (Field field : parentClass.getDeclaredFields()) { // Si le champs n'est pas accessible, on 'force' cela : boolean accessible = field.isAccessible(); if (!accessible) { field.setAccessible(true); } // On récupère les deux valeurs pour ce champs Object o1 = field.get(t1); Object o2 = field.get(t2); // Si les références sont différentes, on compare les valeurs : if (o1!=o2) { // Si les deux champs ne sont pas égaux on retourne false if (o1==null || !o1.equals(o2)) { return false; } // sinon on passe aux champs suivants : } // On restaure l'accessibilité si on l'a modifié... if (!accessible) { field.setAccessible(false); } } return true; }
A noter toutefois que cela neccessite certain droits qui peuvent neccessiter de signer l'application (dans le cas d'une applet ou d'une application JWS).
a++
Partager