next up previous contents index
suivant: Clonage des tableaux monter: Tout un monde d'objets précédent: Méthodes optionnelles ou partielles   Table des matières   Index


Clonage d'objets1#1

Rappelons que l'affectation d'un objet à une variable écrit dans cette variable une référence à l'objet, mais ne crée pas un nouvel objet. Si l'on veut dupliquer un objet, on peut recourir à la méthode clone, définie dans la classe Object. Celle-ci commence par tester si la classe de l'objet réalise l'interface Cloneable ; si c'est le cas, elle effectue une copie superficielle de l'objet, et sinon, elle déclenche l'exception CloneNotSupportedException. Le transtypage (A) est nécessaire, car clone() retourne un Object, pas un A :

  A a1 = new A();
  A a2 = (A) a1.clone();

Cependant, comme l'accessibilité de clone est « protected », cette invocation ne peut figurer qu'à l'intérieur de la classe de l'objet à dupliquer ; sinon, le message d'erreur « clone() has protected access in java.lang.Object » est émis par le compilateur. Afin de pouvoir dupliquer un objet utilisé dans une classe quelconque, il faut redéfinir la méthode clone dans sa classe, en invoquant super.clone() et en la rendant publique :

class A implements Cloneable {
  // ...
  public Object clone() throws CloneNotSupportedException {
    return super.clone();
  }
}

Si l'on veut pouvoir invoquer clone sans être obligé de traiter CloneNotSupportedException, il suffit de récupérer cette exception dans la redéfinition de clone, par exemple de la façon suivante :

  public Object clone() {
    try {
      return super.clone();
    } catch (CloneNotSupportedException e) {}
  }



Sous-sections
next up previous contents index
suivant: Clonage des tableaux monter: Tout un monde d'objets précédent: Méthodes optionnelles ou partielles   Table des matières   Index
Rene' LALEMENT 2002-11-07