Bonsoir, je vous explique mon problème aussi simplement que possible.
Admettons une classe de cette forme
Si je crée deux instances
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 public class Test{ public int nb; public Test(int n) { this.nb=n; } }
Test t1=new Test(5);
Test t2=t1;
t2++;
Un problème survient t1 et t2 valent 6
Alors que normalement je ne voudrais que seulement t2 soit modifié
Qu'à cela ne tienne, j'ai trouvé la parade
je n'ai qu'à réaliser un second constructeur
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 public Test(Test t){ this.nb=t.nb; }
A ce moment là, j'aurais bien un résultat égal à 5 et l'autre à 6.
==> Oui mais !
Si on a un type qui n'est pas primitif cette solution ne marche plus
A ce moment là, redéfinir le constructeur ne marche plus.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 public class Test{ public typeA a; public Test(typeA b) { this.a=b; } }
J'en suis arrivée à la conclusion qu'il me fallait implémenter l'interface et redéfinir clone.
Donc, dans ma classe typeA, j'ai fais la méthode clone
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 public Object clone() { Object o = null; try { // On récupère l'instance à renvoyer par l'appel de la // méthode super.clone() o = super.clone(); } catch(CloneNotSupportedException cnse) { // Ne devrait jamais arriver car nous implémentons // l'interface Cloneable cnse.printStackTrace(System.err); } // on renvoie le clone return o; }
Mais, même avec ça, mes deux instances de classes restent lié...donc je ne sais plus vraiment quoi faire...
Comment puis je "sauvegarder" l'état d'un objet en travaillant sur des copies.
C'est assez gênant car je fais intervenir de l'aléatoire et comme ça prend le même objet en référence, je finis avec la même série aléatoire à chaque fois...
Partager