Cloner objet java

skflers61 Messages postés 43 Date d'inscription   Statut Membre Dernière intervention   -  
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour,

j'essaie de cloner un objet mais apparemment je ne le fais pas comme il faut.

Voici mon code:
public class Piece implements Cloneable{

	...

	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;
  	}
}


et j'appel cette méthode comme ceci:
Piece pieceUsinee = new Piece();
Piece pieceOld = (Piece) pieceUsinee.clone();


Normalement je devrais avoir deux objets différents mais chez moi pieceUsinee et pieceOld pointent vers le même objet.
Une modification sur pieceUsinee se répercute sur pieceOld. (Dans le debugger d'eclipse, on peut voir que ces deux variables on le même id)

Qu'est ce que je dois faire pour réparer sa?

Merci pour vos réponses.
A voir également:

1 réponse

KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
Bonjour,

Dans le debugger d'eclipse, on peut voir que ces deux variables on le même id
Quel est cet id dont tu parles ? Il s'agit d'un champ de ta classe ? Dans ce cas c'est normal qu'ils soient identique, l'id a été clonée aussi...

public class RandomValue implements Cloneable
{
    private final double value = Math.random();
    
    @Override
    public Object clone() throws CloneNotSupportedException
    {
        return super.clone();
    }
        
    public static void main(String[] args) throws CloneNotSupportedException
    {
        RandomValue original = new RandomValue();
        RandomValue clone = (RandomValue) original.clone();

        System.out.println(original==clone); // false
        System.out.println(original.value==clone.value); // true
    }
}

Remarque : si super.clone() propage l'exception c'est que clone() doit également la propager, au minimum pour respecter la signature de la méthode.La confiance n'exclut pas le contrôle
0