Κλώνος αντικειμένου Java ()

Η μέθοδος Java Object clone () δημιουργεί ένα ρηχό αντίγραφο του αντικειμένου.

Εδώ, το ρηχό αντίγραφο σημαίνει ότι δημιουργεί ένα νέο αντικείμενο και αντιγράφει όλα τα πεδία και τις μεθόδους που σχετίζονται με το αντικείμενο.

Η σύνταξη της clone()μεθόδου είναι:

 object.clone()

κλώνος () Παράμετροι

Η clone()μέθοδος δεν λαμβάνει παραμέτρους.

κλώνος () Επιστροφή τιμών

  • επιστρέφει το αντίγραφο του αντικειμένου
  • ρίχνει CloneNotSupportedExceptionεάν η κλάση του αντικειμένου δεν εφαρμόζει τη Cloneableδιεπαφή

Σημείωση : Η Objectτάξη δεν εφαρμόζεται Cloneable. Ως εκ τούτου, δεν μπορούμε να καλέσουμε τη clone()μέθοδο για το αντικείμενο της Objectτάξης.

Παράδειγμα 1: Κλώνος Java ()

 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); ) ) )

Στο παραπάνω παράδειγμα, δημιουργήσαμε μια τάξη με το όνομα Main. Το μάθημα περιλαμβάνει δύο ονόματα πεδίων και έκδοση. Εδώ, έχουμε προετοιμάσει τα πεδία κλάσης χρησιμοποιώντας το αντικείμενο obj1 της κλάσης.

Παρατηρήστε τη γραμμή,

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

Εδώ, χρησιμοποιήσαμε τη clone()μέθοδο για να δημιουργήσουμε αντίγραφο του obj1. Η τιμή που επιστρέφεται clone()αντιστοιχεί στο αντικείμενο obj2. Δεδομένου ότι η τιμή επιστροφής του clone()είναι Objectτύπος, το έχουμε χρησιμοποιήσει (Main)για να το μετατρέψουμε σε Κύριο τύπο.

Τώρα το όνομα και η έκδοση πεδίων είναι προσβάσιμα χρησιμοποιώντας το αντικείμενο obj2. Ωστόσο, εάν αλλάξουμε την τιμή των πεδίων χρησιμοποιώντας το obj2, η τιμή που σχετίζεται με το obj1 δεν θα αλλάξει.

Παράδειγμα 2: Αλλαγή τιμής χρησιμοποιώντας κλωνοποιημένο αντικείμενο

 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); ) ) )

Παρατηρήστε τη γραμμή,

 obj2.name = "Python";

Εδώ, έχουμε αλλάξει την τιμή της μεταβλητής χρησιμοποιώντας το obj2. Τώρα όταν εκτυπώνουμε το όνομα της μεταβλητής τόσο για το obj1 όσο και για το obj2, μπορούμε να δούμε ότι η τιμή για το obj1 δεν έχει αλλάξει. Είναι επειδή η clone()μέθοδος κάνει το ρηχό αντίγραφο των αντικειμένων.

Για να μάθετε περισσότερα σχετικά με το ρηχό αντίγραφο, επισκεφτείτε το Τι είναι το ρηχό αντίγραφο στην Java;

Έχουμε εσωκλείσει τη clone()μέθοδο μέσα στο Java try… catch block. Είναι επειδή η υποκατηγορία μπορεί να ρίξει την εξαίρεση εάν το αντικείμενο δεν μπορεί να κλωνοποιηθεί.

Σημείωση : Το Objectμάθημα είναι το superclass για όλα τα μαθήματα της Java. Ως εκ τούτου, κάθε τάξη και πίνακες μπορούν να εφαρμόσουν τη clone()μέθοδο.

ενδιαφέροντα άρθρα...