Problème d'affectation d'un objet de type arraylist

Résolu
cs_Syndy Messages postés 1 Date d'inscription mardi 14 avril 2009 Statut Membre Dernière intervention 9 avril 2011 - 9 avril 2011 à 20:51
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 - 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?

1 réponse

cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
10 avril 2011 à 07:23
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
3
Rejoignez-nous