mimosa803
Messages postés345Date d'inscriptionjeudi 15 février 2007StatutMembreDernière intervention24 avril 2010
-
9 avril 2010 à 16:54
cs_Julien39
Messages postés6414Date d'inscriptionmardi 8 mars 2005StatutModérateurDernière intervention29 juillet 2020
-
13 avril 2010 à 07:31
Bonjour,
Je suis entrain d'essayer un code dont l'exécution me parait très chelou.
J'affecte le retour d'une méthode dans une liste. Puis, j'ajoute un élément à cette dernière mais quand je fais un affichage des deux listes je remarque qu'elles sont différentes et que l'insertion n'est pas effectuée dans les deux sens. Normalement, par référence la modification d'un objet entraine la modification de l'autre.
Pourriez-vous m'aider à trouver l'erreur, merci :
// Récupération d'un objet avec RMI
IServeur Obj=(IServeur) Naming.lookup(url);
List tabAnnonce=Obj.Fetch();
System.out.println("Longeur du tabAnnonce :"+tabAnnonce.size());
System.out.println("Longeur du vrai objet :"+Obj.Fetch().size());
Annonce c=new Annonce("T1","Titre 1");
System.out.println(Obj.Add(c));
System.out.println("Longeur du vrai objet :"+Obj.Fetch().size());
System.out.println("Longeur du tabAnnonce :"+tabAnnonce.size());
Voila le résultat d'exécution :
Connection au service...
Longeur du tabAnnonce :4
Longeur du vrai objet :4
Cette annonce existe déjà !
Longeur du vrai objet :4
Longeur du tabAnnonce :4
cs_Julien39
Messages postés6414Date d'inscriptionmardi 8 mars 2005StatutModérateurDernière intervention29 juillet 2020371 13 avril 2010 à 07:31
C'est assez simple en fait, normalement en java, comme tout passe par référence, quand on dit A=B et qu'on modifie B, on modifie alors A. Là dessus, tu as tout à fait raison.
Cependant, le résultat de ta méthode Obj.Fetch() n'est pas enregistré, il est recalculé à chaque appel. A chaque appel, tu as donc un enregistrement dans un nouvel espace mémoire. Et au final, ta liste n'est pas synchronisee avec le retour de Obj.Fetch().