Cloner objet java

Fermé
skflers61 Messages postés 43 Date d'inscription jeudi 15 novembre 2007 Statut Membre Dernière intervention 21 novembre 2014 - 21 nov. 2014 à 21:40
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 - 21 nov. 2014 à 21:59
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 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 019
Modifié par KX le 22/11/2014 à 00:05
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