The objektin kloonaus on tapa luoda tarkka kopio objektista. Object-luokan clone()-menetelmää käytetään objektin kloonaamiseen.
The java.lang.Cloneable käyttöliittymä tulee toteuttaa luokassa, jonka objektikloonin haluamme luoda. Jos emme ota käyttöön kloonattavaa käyttöliittymää, clone()-menetelmä luo CloneNotSupportedException .
The klooni() -menetelmä on määritelty Object-luokassa. Klooni()-menetelmän syntaksi on seuraava:
protected Object clone() throws CloneNotSupportedException
Miksi käyttää clone()-menetelmää?
The klooni() -menetelmä tallentaa ylimääräisen käsittelytehtävän kohteen tarkan kopion luomiseksi. Jos suoritamme sen käyttämällä uutta avainsanaa, sen suorittaminen vie paljon käsittelyaikaa, minkä vuoksi käytämme objektin kloonausta.
Objektikloonauksen etu
Vaikka Object.clone() sisältää joitakin suunnitteluongelmia, se on silti suosittu ja helppo tapa kopioida objekteja. Seuraavassa on luettelo klooni()-menetelmän käytön eduista:
- Sinun ei tarvitse kirjoittaa pitkiä ja toistuvia koodeja. Käytä vain abstraktia luokkaa 4- tai 5-rivisellä pitkällä clone()-menetelmällä.
- Se on helpoin ja tehokkain tapa kopioida esineitä, varsinkin jos käytämme sitä jo kehitettyyn tai vanhaan projektiin. Määritä vain yläluokka, toteuta Cloneable siihen, määritä clone()-metodi ja tehtävä on suoritettu.
- Clone() on nopein tapa kopioida taulukko.
Objektikloonauksen haittapuoli
Seuraavassa on luettelo joistakin klooni()-menetelmän haitoista:
- Jotta voisimme käyttää Object.clone()-metodia, meidän on muutettava monia koodimme syntakseja, kuten Cloneable-rajapinnan toteuttaminen, clone()-menetelmän määrittely ja CloneNotSupportedExceptionin käsittely ja lopuksi Object.clone()-kutsuminen.
- Meidän on otettava käyttöön kloonattava käyttöliittymä, vaikka siinä ei ole menetelmiä. Meidän täytyy vain käyttää sitä kertomaan JVM:lle, että voimme suorittaa kloonin () objektillemme.
- Object.clone() on suojattu, joten meidän on annettava oma klooni() ja kutsuttava siitä epäsuorasti Object.clone().
- Object.clone() ei kutsu mitään rakentajaa, joten emme voi hallita objektin rakentamista.
- Jos haluat kirjoittaa kloonimenetelmän aliluokkaan, kaikkien sen superluokkien tulee määrittää kloone()-metodi niissä tai periä se toiselta yläluokalta. Muuten super.clone()-ketju epäonnistuu.
- Object.clone() tukee vain matalaa kopiointia, mutta meidän on ohitettava se, jos tarvitsemme syvää kloonausta.
Esimerkki klooni()-menetelmästä (objektin kloonaus)
Katsotaanpa yksinkertainen esimerkki objektikloonauksesta
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){} } }Testaa nyt
Output:101 amit 101 amitlataa esimerkki objektin kloonauksesta
Kuten yllä olevasta esimerkistä näet, molemmilla viitemuuttujilla on sama arvo. Siten klooni() kopioi objektin arvot toiseen. Joten meidän ei tarvitse kirjoittaa eksplisiittistä koodia kopioidaksemme objektin arvoa toiseen.
Jos luomme toisen objektin uudella avainsanalla ja määritämme tälle toisen objektin arvot, se vaatii paljon käsittelyä tällä objektilla. Joten tallentaaksemme ylimääräisen käsittelytehtävän käytämme clone()-menetelmää.