La méthode clone et l'interface Cloneable - 1

« Salut Amigo ! »

"Salut, Kim."

"Je vais vous parler de la méthode clone()."

"Le but de cette méthode est de cloner un objet, ou en d'autres termes, de créer un clone/copie/duplicata de l'objet."

"Lorsque cette méthode est appelée, la machine virtuelle Java crée et renvoie une copie de l'objet sur lequel elle est appelée.

L'implémentation de la méthode clone par la classe Object est très primitive : un seul nouvel objet est créé et les valeurs des champs de l'objet d'origine sont affectées à ses champs.

Si l'objet copié contient des références à d'autres objets, ces références seront copiées. Les doublons de ces objets ne seront pas créés."

"Hmm. Ce n'est pas beaucoup pour continuer."

"Le fait est que la machine virtuelle Java ne sait pas quels objets peuvent ou non être clonés. Par exemple, les fichiers ne peuvent pas être clonés. Il en va de même pour un flux System.in."

"Ainsi, la question du clonage à part entière a été posée aux développeurs d'une classe. "Tout cela est similaire à la façon dont la méthode equals est gérée. Il y a même quelque chose de comparable à hashCode : l'interface Cloneable."

"L' interface Cloneable est ce qu'on appelle une 'interface de marqueur' : elle n'a aucune méthode et est utilisée pour marquer certaines classes.

"Si le développeur d'une classe pense que les objets de la classe peuvent être clonés, il le marque avec cette interface (c'est-à-dire rend la classe implémentée Cloneable)."

"Si le développeur n'aime pas l'implémentation standard de la méthode clone, il doit écrire la sienne qui créera un objet dupliqué de la bonne manière."

"Lorsque vous appelez la méthode clone (), Java vérifie si l'objet prend en charge l'interface Cloneable. Si c'est le cas, il clone l'objet à l'aide de la méthode clone () ; sinon, il lève une CloneNotSupportedException."

"En d'autres termes, nous devons soit remplacer la méthode clone, soit faire en sorte que la classe implémente Cloneable ?"

"Oui, mais vous devez toujours remplacer la méthode. La méthode clone() est déclarée comme protégée, elle ne peut donc être appelée que par les classes de son package (java.lang.*) ou leurs sous-classes."

"Je suis un peu confus, alors que dois-je faire pour cloner un objet ?"

"Si vous souhaitez utiliser la méthode de clonage « par défaut » de la classe Object, vous devez :

" a) Ajoutez l'interface Cloneable à votre classe"

" b) Remplacez la méthode clone et appelez l'implémentation de la superclasse dans votre implémentation :"

class Point implements Cloneable
{
 int x;
 int y;

 public Object clone()
 {
  return super.clone();
 }
    }

"Ou vous pouvez écrire une implémentation de la méthode clone entièrement par vous-même :"

class Point
{
 int x;
 int y;

 public Object clone()
 {
  Point point = new Point();
  point.x = this.x;
  point.y = this.y;
  return point;
 }
}

"C'est une méthode intéressante. Je suis sûr que je vais l'utiliser. De temps en temps…"