Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2532 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  Problème avec clone !!!

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Problème avec clone !!!

n°1052506
rital_5_4
Posté le 19-04-2005 à 16:47:53  profilanswer
 

Bonjour!  
J'ai fait une petite appli dans laquelle je doit utiliser la méthode clone. Mes classes implementes donc l'interface cloneable et redifinisse la méthode protected Object clone() en public Ojbect clone().
Dans public Object clone je recopie tous les attributs ou classes dans un nouvel object de la facon suivante :

Code :
  1. class c{ ...
  2. public Object clone(){
  3. Copie c= (Copie) super.clone();
  4. c.attribut1 = (Attribut1) attribut1.clone(); // On recopie un type de base
  5. c.classe1 = (Class1) classe1.clone(); // On recopie une classe
  6. ...
  7. return c;
  8. }
  9. ...}


et ca ne marche pas  :pt1cable: ... Pouvez-vous m'aider. Ou alors y'a t-il une autre solution (plus propre) pour copier des objets ? Merci


Message édité par rital_5_4 le 19-04-2005 à 16:48:52
mood
Publicité
Posté le 19-04-2005 à 16:47:53  profilanswer
 

n°1052600
sircam
I Like Trains
Posté le 19-04-2005 à 17:42:49  profilanswer
 

Que veut dire "ça ne marche pas" ? :o

n°1052655
rital_5_4
Posté le 19-04-2005 à 18:24:27  profilanswer
 

l'object n'est pas recopier ailleurs en mémoire et la référence reste la même (ie sur l'object dont on fait la copie)

n°1052667
sircam
I Like Trains
Posté le 19-04-2005 à 18:32:34  profilanswer
 

n'est pas recopier é
je doit s
Mes classes implementes nt
 [:moundir]
 
B*rd*l, les gens ne savent vraiment plus écrire ?! Niveau école primaire !!!! Avant de coder un clone(), quoi, c'est trop demander ? :o
 
Essaye avec disons un attribut "simple" (genre String) et un de ton propre cru, pour simplifier. Ensuite, poste ton code simplifié si ça ne va pas mieux.
 
 
 

n°1052685
senternal
Posté le 19-04-2005 à 18:44:11  profilanswer
 

sircam a écrit :

n'est pas recopier é
je doit s
Mes classes implementes nt
 [:moundir]
 
B*rd*l, les gens ne savent vraiment plus écrire ?! Niveau école primaire !!!! Avant de coder un clone(), quoi, c'est trop demander ? :o
 
Essaye avec disons un attribut "simple" (genre String) et un de ton propre cru, pour simplifier. Ensuite, poste ton code simplifié si ça ne va pas mieux.


 
Avant une solution "propre", ecrire proprement c'est cool aussi... Bref, tu peux utiliser un constructeur par copie, ca evite la surcharge des classes avec clonable

n°1052856
rital_5_4
Posté le 19-04-2005 à 21:21:38  profilanswer
 

ca marche avec les classes que j'ai créé mais avec les vecteurs impossible de faire du clonage ...

n°1052862
sircam
I Like Trains
Posté le 19-04-2005 à 21:31:07  profilanswer
 

Essaye d'accorder la méthode "créé" avec les "classes".
 
"Impossible de faire du clonage" -> pour la 2è fois, pourrais-tu être un peu plus précis et ne pas te limiter à l'équivalent de "ça ne marche pas" ?
 
Ce lien devrait sans doute t'aider.

n°1052869
rital_5_4
Posté le 19-04-2005 à 21:42:41  profilanswer
 

Alors, comme je l'ai dis plus haut mon code ressemble à ca :

Code :
  1. class C{ ...
  2. private Classe1 classe1;
  3. private Attribut1 attribut1;
  4. private Vector liste;
  5. public Object clone(){
  6. Copie c= (Copie) super.clone();
  7. c.attribut1 = (Attribut1) attribut1.clone(); // On recopie une classe
  8. c.classe1 = (Class1) classe1.clone(); // On recopie une classe  
  9. ...
  10. c.liste = (Vector) liste.clone(); // <<< Problème ici vraisemblablement
  11. ...
  12. return c;
  13. }
  14. ...}


Ensuite je fais C maclasse1 = new C(); puis C maclasse2 = maclasse1.clone();
 
Or ensuite lorsque je regarde les reférences des objets clonés :
Les objets maclasse2, maclasse2.attributs1 et maclasse2.classe1 ont des références différentes de l'objet de départ
Et maclasse2.liste garde la même référence que maclasse1.liste ...
 
J'ai essayé d'être plus clair...


Message édité par rital_5_4 le 19-04-2005 à 21:45:46
n°1073584
balinette
Posté le 06-05-2005 à 10:00:20  profilanswer
 

La méthode clone() renvoie une copie d'un objet mais pas de tous les objets qui la constituent...
Si tu as une classe toto du style
 
public class toto{
Object titi;
Object tutu;
 
 
et que tu fais macopie=montoto.clone();
macopie dispose d'un titi a lui et d'un tutu a lui mais qui pointe physiqement sur ceux de montoto
Si tu modifies montoto.titi il va changer celui de ma copie.titi ....
quand tu redefinis la méthode clone() dans ta classe, tu dois aussi cloner les attributs de la classe
 
du style
 
public toto clone(){
toto macopie=new toto();
macopie=this.clone();
macopie.settiti(this.titi.clone());
....
return macopie;
}


Message édité par balinette le 06-05-2005 à 10:00:39

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  Problème avec clone !!!

 

Sujets relatifs
[C#]Probleme de données entre Formprobleme avec frame
[PHP] problème pour faire un requireProbleme xml firefox
[Struts] problème à l'envoi d'un formulaireproblème par rapport aux cellules
[Javascript] Problème avec InnerHTMLProblème avec une chatbox dans une iframe
Problème : JLabel caché en arrière planprobleme de frame
Plus de sujets relatifs à : Problème avec clone !!!


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR