Clonage d'objets Java ()

La méthode Java Object clone () crée une copie superficielle de l'objet.

Ici, la copie superficielle signifie qu'elle crée un nouvel objet et copie tous les champs et méthodes associés à l'objet.

La syntaxe de la clone()méthode est:

 object.clone()

Paramètres clone ()

La clone()méthode ne prend aucun paramètre.

clone () Valeurs de retour

  • renvoie la copie de l'objet
  • jette CloneNotSupportedExceptionsi la classe de l'objet n'implémente pas l' Cloneableinterface

Remarque : la Objectclasse n'est pas implémentée Cloneable. Par conséquent, nous ne pouvons pas appeler la clone()méthode pour l'objet de la Objectclasse.

Exemple 1: Java clone ()

 class Main implements Cloneable ( // declare variables String name; int version; public static void main(String() args) ( // create an object of Main class Main obj1 = new Main(); // initialize name and version using obj1 obj1.name = "Java"; obj1.version = 14; // print variable System.out.println(obj1.name); // Java System.out.println(obj1.version); // 14 try ( // create clone of obj1 Main obj2 = (Main)obj1.clone(); // print the variables using obj2 System.out.println(obj2.name); // Java System.out.println(obj2.version); // 14 ) catch (Exception e) ( System.out.println(e); ) ) )

Dans l'exemple ci-dessus, nous avons créé une classe nommée Main. La classe comprend deux champs nom et version. Ici, nous avons initialisé les champs de classe à l'aide de l'objet obj1 de la classe.

Remarquez la ligne,

 Main obj2 = (Main)obj1.clone();

Ici, nous avons utilisé la clone()méthode pour créer une copie de obj1. La valeur renvoyée par clone()est affectée à l'objet obj2. Puisque la valeur de retour de clone()est Objecttype, nous l'avons utilisée (Main)pour la convertir en type principal.

Le nom et la version des champs sont désormais accessibles à l'aide de l'objet obj2. Cependant, si nous modifions la valeur des champs en utilisant obj2, la valeur associée à obj1 ne sera pas modifiée.

Exemple 2: Modification de la valeur à l'aide d'un objet cloné

 class Main implements Cloneable ( // declare variables String name; int version; public static void main(String() args) ( // create an object of Main class Main obj1 = new Main(); // initialize name and version using obj1 obj1.name = "Java"; obj1.version = 14; // print variable System.out.println(obj1.name); // Java System.out.println(obj1.version); // 14 try ( // create a clone of obj1 Main obj2 = (Main)obj1.clone(); // print the variables using obj2 System.out.println(obj2.name); // Java System.out.println(obj2.version); // 14 // changing value of name // using obj2 obj2.name = "Python"; System.out.println(obj2.name); // Python // check if value associated // with obj1 is changed System.out.println(obj1.name); // Java ) catch (Exception e) ( System.out.println(e); ) ) )

Remarquez la ligne,

 obj2.name = "Python";

Ici, nous avons changé la valeur de la variable en utilisant obj2. Maintenant, lorsque nous imprimons le nom de la variable pour obj1 et obj2, nous pouvons voir que la valeur de obj1 n'a pas changé. C'est parce que la clone()méthode fait la copie superficielle des objets.

Pour en savoir plus sur la copie superficielle, consultez Qu'est-ce qu'une copie peu profonde en Java?

Nous avons inclus la clone()méthode dans le bloc Java try… catch. C'est parce que la sous-classe peut lever l'exception si l'objet ne peut pas être cloné.

Remarque : La Objectclasse est la superclasse de toutes les classes en Java. Par conséquent, chaque classe et chaque tableau peuvent implémenter la clone()méthode.

Articles intéressants...