logo

Kloniranje objektov v Javi

konstruktor v JaviThe kloniranje predmetov je način za ustvarjanje natančne kopije predmeta. Metoda clone() razreda Object se uporablja za kloniranje predmeta.

The java.lang.Vmesnik, ki ga je mogoče klonirati mora implementirati razred, katerega klon objekta želimo ustvariti. Če ne implementiramo vmesnika Cloneable, ustvari metoda clone(). CloneNotSupportedException .

The metoda clone(). je definiran v razredu Object. Sintaksa metode clone() je naslednja:

 protected Object clone() throws CloneNotSupportedException 

Zakaj uporabljati metodo clone()?

The metoda clone(). prihrani dodatno nalogo obdelave za ustvarjanje natančne kopije predmeta. Če jo izvajamo s ključno besedo new, bo za izvedbo potrebna veliko časa obdelave, zato uporabljamo kloniranje objekta.

Prednost kloniranja objektov

Čeprav ima Object.clone() nekaj težav pri oblikovanju, je še vedno priljubljen in enostaven način kopiranja predmetov. Sledi seznam prednosti uporabe metode clone():

  • Ni vam treba pisati dolgih in ponavljajočih se kod. Samo uporabite abstraktni razred s 4- ali 5-vrstično dolgo metodo clone().
  • Je najlažji in najučinkovitejši način za kopiranje objektov, še posebej, če ga apliciramo na že razvit ali star projekt. Samo definirajte nadrejeni razred, vanj implementirajte Cloneable, zagotovite definicijo metode clone() in naloga bo opravljena.
  • Clone() je najhitrejši način kopiranja matrike.

Pomanjkljivost kloniranja objektov

Sledi seznam nekaterih pomanjkljivosti metode clone():

  • Za uporabo metode Object.clone() moramo spremeniti veliko sintaks naše kode, kot je implementacija vmesnika Cloneable, definiranje metode clone() in obravnavanje CloneNotSupportedException ter končno klicanje Object.clone() itd.
  • Implementirati moramo vmesnik, ki ga je mogoče klonirati, medtem ko v njem ni nobenih metod. Samo uporabiti ga moramo, da povemo JVM, da lahko izvedemo clone() na našem objektu.
  • Object.clone() je zaščiten, zato moramo zagotoviti lasten clone() in iz njega posredno poklicati Object.clone().
  • Object.clone() ne prikliče nobenega konstruktorja, zato nimamo nadzora nad konstrukcijo objekta.
  • Če želite napisati metodo klona v podrejenem razredu, morajo vsi njeni nadrazredi v sebi definirati metodo clone() ali jo podedovati od drugega nadrejenega razreda. V nasprotnem primeru veriga super.clone() ne bo uspela.
  • Object.clone() podpira le plitvo kopiranje, vendar ga bomo morali preglasiti, če potrebujemo globoko kloniranje.

Primer metode clone() (kloniranje predmeta)

Oglejmo si preprost primer 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){} } } 
Preizkusite zdaj
 Output:101 amit 101 amit 
prenesite primer kloniranja objekta

Kot lahko vidite v zgornjem primeru, imata obe referenčni spremenljivki enako vrednost. Tako clone() kopira vrednosti enega predmeta v drugega. Torej nam ni treba pisati eksplicitne kode za kopiranje vrednosti predmeta v drugega.

Če ustvarimo drug objekt z novo ključno besedo in temu dodelimo vrednosti drugega objekta, bo za ta objekt potrebno veliko obdelave. Torej, da prihranimo dodatno nalogo obdelave, uporabimo metodo clone().