Klon objektov Java ()

Metóda Java Object clone () vytvára plytkú kópiu objektu.

Plytká kópia tu znamená, že vytvorí nový objekt a skopíruje všetky polia a metódy spojené s objektom.

Syntax clone()metódy je:

 object.clone()

parametre klonu ()

clone()Metóda neberie žiadne parametre.

clone () Návratové hodnoty

  • vráti kópiu objektu
  • hodí, CloneNotSupportedExceptionak trieda objektu neimplementuje Cloneablerozhranie

Poznámka : ObjectTrieda sa neimplementuje Cloneable. Preto nemôžeme nazvať clone()metódu pre objekt Objecttriedy.

Príklad 1: Klon 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); ) ) )

Vo vyššie uvedenom príklade sme vytvorili triedu s názvom Main. Trieda obsahuje dve polia, názov a verziu. Tu sme inicializovali polia triedy pomocou objektu obj1 triedy.

Všimnite si riadok,

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

Tu sme použili clone()metódu na vytvorenie kópie obj1. Hodnota vrátená používateľom clone()je priradená k objektu obj2. Pretože návratová hodnota typu clone()je Object, použili sme ju (Main)na prevod na hlavný typ.

Teraz je možné získať prístup k názvu a verzii polí pomocou objektu obj2. Ak však zmeníme hodnotu polí pomocou obj2, hodnota spojená s obj1 sa nezmení.

Príklad 2: Zmena hodnoty pomocou klonovaného objektu

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

Všimnite si riadok,

 obj2.name = "Python";

Tu sme zmenili hodnotu premennej pomocou obj2. Teraz, keď vytlačíme názov premennej pre obj1 aj obj2, vidíme, že hodnota pre obj1 sa nezmenila. Je to preto, lebo clone()metóda vytvára plytkú kópiu objektov.

Ak sa chcete dozvedieť viac o plytkej kópii, navštívte Čo je plytká kópia v jazyku Java?

clone()Metódu sme uzavreli do bloku Java try … catch. Je to preto, že podtrieda môže vyvolať výnimku, ak objekt nemožno klonovať.

Poznámka : ObjectTrieda je nadtriedou pre všetky triedy v prostredí Java. Túto clone()metódu teda môže implementovať každá trieda a polia .

Zaujímavé články...