Problème copie Arraylist incompréhensible

Résolu
Bubuss Messages postés 147 Date d'inscription samedi 7 juin 2003 Statut Membre Dernière intervention 8 décembre 2007 - 3 août 2006 à 17:50
Bubuss Messages postés 147 Date d'inscription samedi 7 juin 2003 Statut Membre Dernière intervention 8 décembre 2007 - 3 août 2006 à 18:18
Salut tt le monde!

Alors voilà j'ai une fenetre modal qui me retourne une Arraylist
J'ai deux possibilité, soit je valide, soit j'annule
Si je valide la liste est modifiée, si j'annule je veux renvoyer la liste sans les modifications...

Je prépare ma fenetre comme ça...
maFormmaFenetre = new maForm(maListedeBase);
maFenetre.ShowDialog();
returnmaFenetre.maListe;

Dans l'initialisation de la fenetre je recopie maListedeBase dans this.maListe et dans this.maListeSAV :
this.maListe = maListedeBase;
this.maListeSAV = maListedeBase;

(...traitement...)

Si l'utilisateur click sur annuler dans l'evenement du bouton je fait :
this.maListe = this.maListeSAV;

Donc déjà ici je me suis apperçu que ça ne marchait pas car ma liste était quand même modifiée alors j'ai changé d'écriture et j'ai écrit comme ça dans l'evenement du bouton :
this.maListe = new ArrayList(this.maListeSAV);

>> De la même façon j'ai aussi modifié le début :
this.maListe = new ArrayList(maListedeBase);
this.maListeSAV = new ArrayList(maListedeBase);

Ici plus aucun problème il me recopiait bien les éléments d'origine mais en fesant des tests j'ai eu une grosse surprise!! !

Dans mes listes j'ai des Objets que je peut ajouter, supprimer et aussi modifier leur propriétés et quand je modifie une propriété et que j'annule la propriété à quand même été modifiée malgrès le new ArrayList(this.maListeSAV); !!!

Quelqu'un a t il une explication rationnelle ?

MERCI BEAUCOUP à celui qui m'aidera à comprendre!!

PS: Je précise que je travail directement sur la liste maListe et que à aucun moment je ne touche à maListeSAV

5 réponses

Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
3 août 2006 à 18:11
C'est la différence entre une copie partielle et une copie complète, les objets de types valeurs sont copiés ( bit par bit ) mais les objets de type références une copie de leur référence est faite mais elles pointent sur le même objet en mémoire. La classe ArrayList a une fonction Clone mais tu auras le même problème, faut certainement créer ta propre fonction de copie.
3
bernie666 Messages postés 427 Date d'inscription mercredi 1 octobre 2003 Statut Membre Dernière intervention 29 janvier 2008 1
3 août 2006 à 17:59
this.maListe = maListedeBase;
this.maListeSAV = maListedeBase;

maListeSAV => tu a fait une nouvelle isntance de cette liste
si tu n'as pas fait de nouvelle instance => c'est juste une variable pointeur qui ce rapport a la plage memoire ou est stockée maListedeBase

> si pas de nouvelles instance maListe maListeSAV = maListedeBase ...
0
Bubuss Messages postés 147 Date d'inscription samedi 7 juin 2003 Statut Membre Dernière intervention 8 décembre 2007
3 août 2006 à 18:05
ok c'est se que je me suis dis
Mais après j'ai fait :
this.maListe = new ArrayList(maListedeBase);
this.maListeSAV = new ArrayList(maListedeBase);

Comment celà se fait il que ça marche lorsque je me contente de supprimer ou ajouter des éléments mais que lorsque je modifie une propriété de l'élément celà ne marche plus ?
maListeSav != de maListe non ?
ou alors maListeSav !maListe mais maListeSAV.Items maListe.Items ? l'entité arrayliste étant différente mais pas les entités objets la comportant ?
0
Bubuss Messages postés 147 Date d'inscription samedi 7 juin 2003 Statut Membre Dernière intervention 8 décembre 2007
3 août 2006 à 18:07
ben non c pas des items pourtant...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Bubuss Messages postés 147 Date d'inscription samedi 7 juin 2003 Statut Membre Dernière intervention 8 décembre 2007
3 août 2006 à 18:18
Il faut que je fasse une copie de chaque objet de mon ArrayList plutot que de l'ArrayList elle même.. et si il y a annulation je fait un clear et je rajoute la savegarde de chacun de mes objets sauvé!
Ben ça c pas terrible...

Au boulot!! lol

Merci bien
0
Rejoignez-nous