logo

Klonovanie objektov v Jave

konštruktor v javeThe klonovanie objektu je spôsob, ako vytvoriť presnú kópiu objektu. Metóda clone() triedy Object sa používa na klonovanie objektu.

The java.lang.Klonovateľné rozhranie musí byť implementované triedou, ktorej objektový klon chceme vytvoriť. Ak neimplementujeme rozhranie Cloneable, vygeneruje metóda clone(). CloneNotSupportedException .

bash ak inak

The metóda clone(). je definovaný v triede Object. Syntax metódy clone() je nasledovná:

 protected Object clone() throws CloneNotSupportedException 

Prečo používať metódu clone()?

The metóda clone(). uloží dodatočnú úlohu spracovania na vytvorenie presnej kópie objektu. Ak to vykonáme pomocou kľúčového slova new, bude to trvať veľa času na spracovanie, preto používame klonovanie objektov.

Výhoda klonovania objektov

Hoci Object.clone() má určité problémy s dizajnom, stále je to populárny a jednoduchý spôsob kopírovania objektov. Nasleduje zoznam výhod použitia metódy clone():

  • Nemusíte písať zdĺhavé a opakujúce sa kódy. Stačí použiť abstraktnú triedu s metódou clone() so 4 alebo 5 riadkami.
  • Je to najjednoduchší a najefektívnejší spôsob kopírovania objektov, najmä ak ho aplikujeme na už rozpracovaný alebo starý projekt. Stačí definovať rodičovskú triedu, implementovať do nej Cloneable, poskytnúť definíciu metódy clone() a úloha bude hotová.
  • Clone() je najrýchlejší spôsob kopírovania poľa.

Nevýhoda klonovania objektov

Nasleduje zoznam niektorých nevýhod metódy clone():

  • Aby sme mohli použiť metódu Object.clone(), musíme zmeniť veľa syntaxí nášho kódu, ako je implementácia rozhrania Cloneable, definovanie metódy clone() a spracovanie CloneNotSupportedException a nakoniec volanie Object.clone() atď.
  • Musíme implementovať klonovateľné rozhranie, zatiaľ čo v ňom nie sú žiadne metódy. Musíme ho použiť na to, aby sme JVM povedali, že na našom objekte môžeme vykonať clone().
  • Object.clone() je chránený, takže musíme poskytnúť vlastný klon() a nepriamo z neho volať Object.clone().
  • Object.clone() nevyvoláva žiadny konštruktor, takže nad konštrukciou objektu nemáme žiadnu kontrolu.
  • Ak chcete napísať metódu clone v podradenej triede, všetky jej nadtriedy by v nich mali definovať metódu clone() alebo ju zdediť od inej nadradenej triedy. V opačnom prípade reťazec super.clone() zlyhá.
  • Object.clone() podporuje iba plytké kopírovanie, ale ak potrebujeme hlboké klonovanie, budeme ho musieť prepísať.

Príklad metódy clone() (klonovanie objektov)

Pozrime sa na jednoduchý príklad klonovania objektov

 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){} } } 
Vyskúšajte to
 Output:101 amit 101 amit 
stiahnite si príklad klonovania objektov

Ako môžete vidieť vo vyššie uvedenom príklade, obe referenčné premenné majú rovnakú hodnotu. Clone() teda skopíruje hodnoty objektu do iného. Takže nepotrebujeme písať explicitný kód na kopírovanie hodnoty objektu do iného.

Ak novým kľúčovým slovom vytvoríme ďalší objekt a tomuto priradíme hodnoty iného objektu, bude to vyžadovať veľa spracovania na tomto objekte. Aby sme teda ušetrili ďalšiu úlohu spracovania, použijeme metódu clone().