[java] clone() [partielement resolu]

clone() [partielement resolu] [java] - Java - Programmation

Marsh Posté le 11-04-2005 à 01:28:49    

Bonjour a tous,  
 
J'ai un petit probleme :
 
J ai une classe Solution (qui determine le type de structure d'un objet solution).
"v" et "courant" son de type Solution.
 
J ai une classe Algorithme.
 
Dans cette classe, j ai une methode A qui a un moment donné fait :
 
v=getNextVoisin(courant);
 
La methode getNextVoisin(courant) fait :
Solution temp = courant;
modifit temp
et renvoit temp.
 
mon probleme c'est que ca modifit en meme temps que "temp" l'objet "courant"
 
Hors je voudrais juste copier le contenu de "courant" dans "temp".
J ai essayé :
 
-----------------------------------------------
Solution temp = (Solution)courant.clone()
 
mais clone est une methode protected et je ne peux pas l 'appeler.
--------------------------------------------------
La meme chose qu'avant mais avec :
package Coucou;
 
en entete de tous mes .java
 
ca marche pas clone() ne veut toujorus pas se lancer.
--------------------------------------------------
faire implementer l'interface Cloneable a la classe Solution et lui ajouter la methode :
 
public getCopy() {
try{
return (Solution)this.clone();
}catch(java.lang.CloneNotSupportedException e){return null;}
}
 
 
Ca marche pas, ca fait comme si j avais rien fait du tout et j 'ai toujorus le meme probleme.
------------------------------------------
La meme chose sans implémenter l'interface Cloneable,
ca marchepas ca renvoit toujours l'exception java.lang.CloneNotSupportedException et donc ca renvoit null a chaque fois.
------------------------------------------
 
 
voila j'ai plus d'idée ... si quelqu'un sait comment on peut copier le contenu d'un objet dans un autre ca me serait bien utile  :)  
 
Merci d'avance.


Message édité par patastronch le 11-04-2005 à 02:11:36
Reply

Marsh Posté le 11-04-2005 à 01:28:49   

Reply

Marsh Posté le 11-04-2005 à 02:06:10    

Bon j ai reussi a trouver une maniere de faire.
Je la poste pour si certaines personnes sont interessées.
Si vous avez une meilleure solution n'hesitez pas a laposter s'il vous plait.
 
Dans la class solution je rajoute un constructeur :
 
public Solution(Solution sol) {
this.attribut1=(sol.attribut1).clone();
...
this.attributN=(sol.attributN).clone();
}
 
ainsi pour copier il suffit de faire :
 
Solution temp=new Solution(courant);
 
Remarque : les attributs doivent etre clonable et donc leurs classes doivent implementer l'interface cloneable.
 
Voila, je me doute qu'il y a des meilleures facons de faire, ainsi si vous en connaissez unejesuis preneur.
 
Cordialement.


Message édité par patastronch le 11-04-2005 à 02:08:12
Reply

Marsh Posté le 11-04-2005 à 09:00:09    

Quand on fait des maths, en général on fait des objets non-modifiables et on en construit des nouveaux possédant les nouvelles caractéristiques au fur-et-à-mesure du déroulement de l'algorithme.
 
Comme en maths quoi ...


---------------
trainoo.com, c'est fini
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed