Bonsoir, je vous explique mon problème aussi simplement que possible.


Admettons une classe de cette forme

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;
}
 
}
Si je crée deux instances

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

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;
}
 
}
A ce moment là, redéfinir le constructeur ne marche plus.


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...