Bonjour,
J'ai un problème de référence entre objets que je n'arrive à résoudre. Mon problème vient de la sérialisation/désérialisation des données car quand le programme tourne, lorsque je fais des modifications sur les instances, tout est bien mis à jour.
Pour résumer rapidement j'ai une liste de produits de base, qui rentrent dans la composition d'un produit fini. Lorsque je modifie un produit de base, les mêmes produits de base qui composent un produit fini sont bien mis à jour puisqu'ils ont la même référence.
Lorsque je relance le programme et que je désérialise mes données pour récupérer mes instances de produits de base et de produits finis, forcément mes produits de base qui composent mes produits finis n'ont plus la même référence que mes produits de base car ils sont sauvés dans des fichiers différents.
J'ai donc mis en place une fonction pour updater les références mais ça ne marche pas et je comprends pas. L'algorithme semble bon puisque la console m'affiche bien le message d'update mais l'instructionne semble pas avoir d'effet car quand je fais un affichage des instances de produits de base et des produits de base d'un produit fini l'update n'a clairement pasd fonctionné.
Code : Sélectionner tout - Visualiser dans une fenêtre à part bp=bpref;
Je suis preneur d'une solution pour ce cas, où d'une autre solution plus légère/optimisée que je pourrais mettre en place car je trouve cette fonction d'update un peu lourde. De plus je ne comprends PAS DU TOUT pourquoi l'affectation d'instance ne marche pas....
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
18
19
20
21
22
23
24 public void syncBaseProductsAtLoading(TreeSet<BaseProduct> bpset) { /** Iterate the finished product map for each entry<K,V> **/ for ( Entry<ProductFamily,TreeSet<FinishedProduct>> entry : this.menumap.entrySet() ) { /** For each finished product in the menumap, update the reference of their base products **/ for ( FinishedProduct fp : entry.getValue() ) { Iterator<BaseProduct> iter=fp.getBaseProductList().iterator(); while ( iter.hasNext() ) { BaseProduct bp=iter.next(); for ( BaseProduct bpref : bpset ) { if ( bpref.getName().equals(bp.getName()) ) { System.out.println("Produit de base "+bp.getName()+bp+" remplacé par "+bpref.getName()+bpref); bp=bpref; } } } } } }
Partager