Bonjour :
Je cherche à réaliser à l'aide de Java reflect l'égalité de 2 Object Java .
Comment réaliser un equals() en profondeur sur des Collections/List ...
(et par le meme temps éviter le unchecked classe exception)
![]()
Bonjour :
Je cherche à réaliser à l'aide de Java reflect l'égalité de 2 Object Java .
Comment réaliser un equals() en profondeur sur des Collections/List ...
(et par le meme temps éviter le unchecked classe exception)
![]()
Salut,
Les Collections/List implémentent déjà la méthode equals()...
Après reste à savoir ce que tu entends par "en profondeur" !
a++
Par ailleurs, c'est quoi, ça, "unchecked class exception" ?
Ce que je voudrais faire par exemple en Java reflect c'est comparer si deux object Customer sont égaux. (c'est à dire je voudrais comparer la valeur de name, des chacun des éléments de List<Item>,List<Waranty> etc ...)
Exemple :
Code : 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 class Customer(){ private String name; List<Item> items; } class Item(){ int quantite; float price; List<Waranty> waranty; } class waranty(){ String name; int duration; String price; }
Il ne faut pas passer par l'API de reflection, mais implémenter les méthodes hashCode()/equals()...
Pourquoi et comment redéfinir la méthode equals() ?
Pourquoi et comment redéfinir la méthode hashCode() ?
a++
Si les éléments de la liste implémentent correctement equals et ahshcode (voir message d'adiguba)
La reflection, oubliez, c'est bien souvent utilisé à tord et à travers par des gens qui ne veulent pas utiliser ce que les apis leur fournissent déjà.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 liste1.equals(liste2) // compare si les listes on les mêmes éléments dans le même ordre liste1.containsAll(liste2) // s'assure que tous les éléments de liste2 sont dans liste 1 liste1.containsAll(liste2) && liste2.containsAll(liste1) // les listes sont les même à l'ordre et la quantité près
Vous implémentez equals et hashcode dans votre Customer, vous pourrez alors tester leur égalité.
Code : 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 class Customer(){ private String name; List<Item> items; public boolean equals(Object o){ if (o instanceof Customer){ Customer c = (Customer) o; return c.name.equals(name) && c.items.equals(items); } return false; } public int hashCode(){ return name.hashCode() ^ items.hashCode(); } } //etc
en gros il faudrait liste tous les champs primitifs et faire un equals dessus ...c'est assez lourd si j'ai des très gros bean .
Pas un autre moyen + industrielle?
Je ne veux pas écrire dans la classe Customer.
Je souhaiterais un classe générique .![]()
en utilisant le BeanWrapper de Spring ca pourrait marcher ?![]()
Partager