Problème d'affectation d'un objet de type arraylist [Résolu]

Messages postés
1
Date d'inscription
mardi 14 avril 2009
Statut
Membre
Dernière intervention
9 avril 2011
- - Dernière réponse : cs_Julien39
Messages postés
6413
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
17 mai 2018
- 10 avril 2011 à 07:23
Bonsoir,
SVP j'ai un problème dans Arraylist de java,
quand je veux affecter à un objet C à un autre objet O de type arraylist après les modifications dans C , O aussi se change par exemple j'ai:
TextCode=ConnaissanceCollective.get(index).solution;
si je fais des modifications sur "TexteCode" je vois que "ConnaissanceCollective.get(index).solution" se change aussi

SVP quelqu'un peut m'aider, comment faire l'affectation?
Afficher la suite 

1 réponse

Meilleure réponse
Messages postés
6413
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
17 mai 2018
246
3
Merci
Java utilise des références, donc quand tu tapes TextCode=ConnaissanceCollective.get(index).solution; TextCode contient une référence vers l'objet ConnaissanceCollective.get(index).solution si tu le modifie tu modifie également l'objet de la liste puisque dans la liste, tu as une référence vers le même objet

Normalement, tu ne devrais pas avoir besoin de récupérer une copie de ton objet, tu dois pouvoir faire autrement, cependant, si tu as vraiment besoin de récupérer une copie de ton obket, implémente dans chacune des classes la méthode clone.

Et dans cette méthode clone, if faut que tu créé un nouvel objet à partir de l'objet courant, mais attention, tout est référence sauf les types primitifs (int, boolean, char, tout ceux qui commencent par une minuscule)

Par exemple pour connaissanceCollective :
     public ConnaissanceCollective clone(){
          //Je ne connais pas tous les attributs
          return new ConnaissanceCollective(solution.clone());
     }


Solution est un objet, donc, tu ne résoudra ton problème qu'en écrivant une méthode clone pour la classes solution, là, je ne sais pas ce que contient la classes solution, pour te donner un exemple, je vais imaginer qu'elle contient deux variables : var1 de type String et var2 de type int

     public Solution clone(){
          //Il faudrait vérifier que la fonctin clone de String fonctionne bien
          return new Solution(var1.clone(), var2);
     }


Pour plus d'info sur la facon de bien utiliser clone http://ydisanto.developpez.com/tutoriels/j2se/cloneable/


Une dernière remarque, essaye de te passer de la définition de ces méthodes clone, il y a certainement un moyen, les méthodes clone sont assez difficiles et lourdes à implémenter, en effet, elles supportent mal l'héritage, il faut les redéfinir à chaque fois.


Donne nous ton code si tu n'arrives pas à t'en passer...

Bonne chance

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 195 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_Julien39