The clonarea obiectelor este o modalitate de a crea o copie exactă a unui obiect. Metoda clone() a clasei Object este folosită pentru a clona un obiect.
The java.lang.Interfață clonabilă trebuie implementat de clasa a cărei clonă de obiect dorim să o creăm. Dacă nu implementăm interfața Cloneable, se generează metoda clone(). CloneNotSupportedException .
The metoda clone(). este definită în clasa Object. Sintaxa metodei clone() este următoarea:
protected Object clone() throws CloneNotSupportedException
De ce să folosiți metoda clone()?
The metoda clone(). salvează sarcina de procesare suplimentară pentru crearea copiei exacte a unui obiect. Dacă o efectuăm folosind cuvântul cheie nou, va dura mult timp de procesare pentru a fi efectuată, de aceea folosim clonarea obiectelor.
Avantajul clonării obiectelor
Deși Object.clone() are unele probleme de design, este totuși o modalitate populară și ușoară de a copia obiecte. Mai jos este o listă de avantaje ale utilizării metodei clone():
gruparea
- Nu trebuie să scrieți coduri lungi și repetitive. Utilizați doar o clasă abstractă cu o metodă clone() lungă de 4 sau 5 linii.
- Este cea mai ușoară și eficientă modalitate de a copia obiecte, mai ales dacă o aplicăm unui proiect deja dezvoltat sau vechi. Doar definiți o clasă părinte, implementați Cloneable în ea, oferiți definiția metodei clone() și sarcina va fi realizată.
- Clone() este cel mai rapid mod de a copia matrice.
Dezavantajul clonării obiectelor
Mai jos este o listă cu câteva dezavantaje ale metodei clone():
- Pentru a folosi metoda Object.clone(), trebuie să schimbăm o mulțime de sintaxe la codul nostru, cum ar fi implementarea unei interfețe Cloneable, definirea metodei clone() și gestionarea CloneNotSupportedException și, în sfârșit, apelarea Object.clone() etc.
- Trebuie să implementăm o interfață care poate fi clonată în timp ce nu are nicio metodă în ea. Trebuie doar să-l folosim pentru a spune JVM-ului că putem efectua clone() pe obiectul nostru.
- Object.clone() este protejat, așa că trebuie să furnizăm propriul nostru clone() și să apelăm indirect Object.clone() din acesta.
- Object.clone() nu invocă niciun constructor, așa că nu avem niciun control asupra construcției obiectului.
- Dacă doriți să scrieți o metodă de clonare într-o clasă copil, atunci toate superclasele sale ar trebui să definească metoda clone() în ele sau să o moștenească de la o altă clasă părinte. În caz contrar, lanțul super.clone() va eșua.
- Object.clone() acceptă doar copierea superficială, dar va trebui să o înlocuim dacă avem nevoie de clonare profundă.
Exemplu de metoda clone() (Clonarea obiectelor)
Să vedem exemplul simplu de clonare a obiectelor
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){} } }Testează-l acum
Output:101 amit 101 amitdescărcați exemplul de clonare a obiectelor
După cum puteți vedea în exemplul de mai sus, ambele variabile de referință au aceeași valoare. Astfel, clone() copiază valorile unui obiect în altul. Deci nu trebuie să scriem cod explicit pentru a copia valoarea unui obiect în altul.
Dacă creăm un alt obiect cu un cuvânt cheie nou și îi atribuim valorile unui alt obiect acestuia, va necesita multă procesare pe acest obiect. Deci, pentru a salva sarcina de procesare suplimentară, folosim metoda clone().