logo

Clonage d'objets en Java

constructeur en javaLe clonage d'objet est un moyen de créer une copie exacte d'un objet. La méthode clone() de la classe Object est utilisée pour cloner un objet.

Le interface java.lang.Cloneable doit être implémenté par la classe dont nous voulons créer le clone d'objet. Si nous n'implémentons pas l'interface Cloneable, la méthode clone() génère CloneNotSupportedException .

Le méthode clone() est défini dans la classe Object. La syntaxe de la méthode clone() est la suivante :

 protected Object clone() throws CloneNotSupportedException 

Pourquoi utiliser la méthode clone() ?

Le méthode clone() enregistre la tâche de traitement supplémentaire pour créer la copie exacte d'un objet. Si nous l'effectuons en utilisant le nouveau mot-clé, cela prendra beaucoup de temps de traitement, c'est pourquoi nous utilisons le clonage d'objets.

Avantage du clonage d'objet

Bien que Object.clone() présente quelques problèmes de conception, il reste un moyen populaire et simple de copier des objets. Voici une liste des avantages de l’utilisation de la méthode clone() :

  • Vous n'avez pas besoin d'écrire des codes longs et répétitifs. Utilisez simplement une classe abstraite avec une méthode clone() longue de 4 ou 5 lignes.
  • C'est la manière la plus simple et la plus efficace de copier des objets, surtout si nous l'appliquons à un projet déjà développé ou ancien. Définissez simplement une classe parent, implémentez-y Cloneable, fournissez la définition de la méthode clone() et la tâche sera terminée.
  • Clone() est le moyen le plus rapide de copier un tableau.

Inconvénient du clonage d'objet

Voici une liste de quelques inconvénients de la méthode clone() :

renommer un répertoire Linux
  • Pour utiliser la méthode Object.clone(), nous devons modifier de nombreuses syntaxes dans notre code, comme implémenter une interface Cloneable, définir la méthode clone() et gérer CloneNotSupportedException, et enfin, appeler Object.clone() etc.
  • Nous devons implémenter une interface clonable alors qu'elle ne contient aucune méthode. Il suffit de l'utiliser pour indiquer à la JVM que nous pouvons exécuter clone() sur notre objet.
  • Object.clone() est protégé, nous devons donc fournir notre propre clone() et appeler indirectement Object.clone() à partir de celui-ci.
  • Object.clone() n'appelle aucun constructeur, nous n'avons donc aucun contrôle sur la construction des objets.
  • Si vous souhaitez écrire une méthode clone dans une classe enfant, toutes ses superclasses doivent y définir la méthode clone() ou en hériter d'une autre classe parent. Sinon, la chaîne super.clone() échouera.
  • Object.clone() ne prend en charge que la copie superficielle, mais nous devrons la remplacer si nous avons besoin d'un clonage profond.

Exemple de méthode clone() (Clonage d'objet)

Voyons l'exemple simple du clonage d'objet

 class Student18 implements Cloneable{ int rollno; String name; Student18(int rollno,String name){ this.rollno=rollno; this.name=name; } public Object clone()throws CloneNotSupportedException{ return super.clone(); } public static void main(String args[]){ try{ Student18 s1=new Student18(101,'amit'); Student18 s2=(Student18)s1.clone(); System.out.println(s1.rollno+' '+s1.name); System.out.println(s2.rollno+' '+s2.name); }catch(CloneNotSupportedException c){} } } 
Testez-le maintenant
 Output:101 amit 101 amit 
télécharger l'exemple de clonage d'objet

Comme vous pouvez le voir dans l'exemple ci-dessus, les deux variables de référence ont la même valeur. Ainsi, le clone() copie les valeurs d'un objet vers un autre. Nous n'avons donc pas besoin d'écrire du code explicite pour copier la valeur d'un objet vers un autre.

Si l’on crée un autre objet par new mot-clé et assigne les valeurs d’un autre objet à celui-ci, cela nécessitera beaucoup de traitements sur cet objet. Donc, pour économiser la tâche de traitement supplémentaire, nous utilisons la méthode clone().