logo

Kloniranje objekata u Javi

konstruktor u JaviThe kloniranje objekta je način stvaranja točne kopije objekta. Metoda clone() klase Object koristi se za kloniranje objekta.

The java.lang.Klonirano sučelje mora implementirati klasa čiji klon objekta želimo kreirati. Ako ne implementiramo Cloneable sučelje, generira se metoda clone(). CloneNotSupportedException .

The clone() metoda definirana je u klasi Object. Sintaksa metode clone() je sljedeća:

 protected Object clone() throws CloneNotSupportedException 

Zašto koristiti metodu clone()?

The clone() metoda sprema dodatni zadatak obrade za stvaranje točne kopije objekta. Ako to izvedemo korištenjem nove ključne riječi, trebat će puno vremena obrade da se izvrši i zato koristimo kloniranje objekta.

Prednost kloniranja objekata

Iako Object.clone() ima nekih problema s dizajnom, još uvijek je popularan i jednostavan način kopiranja objekata. Slijedi popis prednosti korištenja metode clone():

  • Ne morate pisati dugačke kodove koji se ponavljaju. Samo koristite apstraktnu klasu s metodom clone() od 4 ili 5 redaka.
  • To je najlakši i najučinkovitiji način za kopiranje objekata, pogotovo ako ga primjenjujemo na već razvijen ili stari projekt. Samo definirajte nadređenu klasu, implementirajte Cloneable u nju, dajte definiciju metode clone() i zadatak će biti obavljen.
  • Clone() je najbrži način kopiranja polja.

Nedostatak kloniranja objekata

Slijedi popis nekih nedostataka metode clone():

  • Da bismo koristili metodu Object.clone(), moramo promijeniti mnogo sintaksi u našem kodu, poput implementacije Cloneable sučelja, definiranja metode clone() i rukovanja CloneNotSupportedException, i konačno, pozivanja Object.clone() itd.
  • Moramo implementirati sučelje koje se može klonirati dok ono u sebi nema nikakve metode. Samo ga moramo koristiti da kažemo JVM-u da možemo izvesti clone() na našem objektu.
  • Object.clone() je zaštićen, tako da moramo osigurati vlastiti clone() i neizravno pozvati Object.clone() iz njega.
  • Object.clone() ne poziva nikakav konstruktor tako da nemamo kontrolu nad konstrukcijom objekta.
  • Ako želite napisati metodu klona u klasu dijete, tada bi sve njene superklase trebale definirati metodu clone() u sebi ili je naslijediti od druge klase roditelja. U suprotnom, lanac super.clone() neće uspjeti.
  • Object.clone() podržava samo plitko kopiranje, ali morat ćemo ga nadjačati ako trebamo duboko kloniranje.

Primjer metode clone() (kloniranje objekta)

Pogledajmo jednostavan primjer kloniranja objekta

 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){} } } 
Testirajte sada
 Output:101 amit 101 amit 
preuzmite primjer kloniranja objekta

Kao što možete vidjeti u gornjem primjeru, obje referentne varijable imaju istu vrijednost. Dakle, clone() kopira vrijednosti jednog objekta u drugi. Dakle, ne trebamo pisati eksplicitni kod za kopiranje vrijednosti jednog objekta u drugi.

Ako stvorimo drugi objekt novom ključnom riječi i dodijelimo vrijednosti drugog objekta ovom, to će zahtijevati puno obrade na ovom objektu. Dakle, da uštedimo dodatni zadatak obrade koristimo metodu clone().