Java Object -klooni ()

Java Object clone () -menetelmä luo matalan kopion objektista.

Tässä matala kopio tarkoittaa, että se luo uuden objektin ja kopioi kaikki objektiin liittyvät kentät ja menetelmät.

Menetelmän syntaksi clone()on:

 object.clone()

klooni () -parametrit

clone()Menetelmä ei ota parametreja.

klooni () Palautusarvot

  • palauttaa objektin kopion
  • heittää, CloneNotSupportedExceptionjos objektin luokka ei toteuta Cloneablekäyttöliittymää

Huomaa : ObjectLuokkaa ei toteuteta Cloneable. Siksi emme voi kutsua luokan clone()objektin menetelmää Object.

Esimerkki 1: Java-klooni ()

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

Yllä olevassa esimerkissä olemme luoneet luokan nimeltä Main. Luokka sisältää kaksi kentän nimeä ja versiota. Tässä olemme alustaneet luokan kentät luokan objektilla obj1.

Huomaa rivi,

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

Tässä olemme käyttäneet clone()menetelmää luomaan obj1-kopion. Palautettu arvo clone()määritetään objektille obj2. Koska paluuarvo clone()on Objecttype, olemme (Main)muuttaneet sen Main-tyypiksi.

Nyt kenttien nimi ja versio ovat käytettävissä objektilla obj2. Jos kuitenkin muutamme kenttien arvoa obj2: n avulla, obj1: een liittyvää arvoa ei muuteta.

Esimerkki 2: Arvon muuttaminen kloonatun objektin avulla

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

Huomaa rivi,

 obj2.name = "Python";

Tässä olemme muuttaneet muuttujan arvoa obj2: n avulla. Nyt kun tulostamme muuttujan nimen sekä obj1: lle että obj2: lle, voimme nähdä, että obj1: n arvo ei ole muuttunut. Tämä johtuu siitä, että clone()menetelmä tekee esineiden matalan kopion.

Lisätietoja matalasta kopiosta on kohdassa Mikä on matala kopio Java-ohjelmassa?

Olemme liittäneet clone()menetelmän Java try … catch block -laajentoon. Se johtuu siitä, että alaluokka voi heittää poikkeuksen, jos kohdetta ei voida kloonata.

Huomaa : ObjectLuokka on kaikkien Java-luokkien superluokka. Näin ollen jokainen luokka ja taulukot voivat toteuttaa clone()menetelmän.

Mielenkiintoisia artikkeleita...