The objektų klonavimas yra būdas sukurti tikslią objekto kopiją. Objekto klasės metodas clone() naudojamas objektui klonuoti.
The java.lang.Klonuojama sąsaja turi būti įgyvendinta klasėje, kurios objekto kloną norime sukurti. Jei neįdiegsime Cloneable sąsajos, sugeneruojamas clone() metodas CloneNotSupportedException .
The klono() metodas yra apibrėžtas objektų klasėje. Klono() metodo sintaksė yra tokia:
protected Object clone() throws CloneNotSupportedException
Kodėl naudoti klono() metodą?
The klono() metodas išsaugo papildomą apdorojimo užduotį kuriant tikslią objekto kopiją. Jei tai atliekame naudodami naują raktinį žodį, apdorojimas užtruks daug laiko, todėl naudojame objektų klonavimą.
Objektų klonavimo privalumas
Nors Object.clone() turi tam tikrų dizaino problemų, tačiau tai vis dar yra populiarus ir paprastas būdas kopijuoti objektus. Toliau pateikiamas klono () metodo pranašumų sąrašas:
- Jums nereikia rašyti ilgų ir pasikartojančių kodų. Tiesiog naudokite abstrakčią klasę su 4 arba 5 eilučių ilgu klono() metodu.
- Tai lengviausias ir efektyviausias būdas kopijuoti objektus, ypač jei jį taikome jau sukurtam ar senam projektui. Tiesiog apibrėžkite pirminę klasę, įdiekite joje Cloneable, pateikite klono() metodo apibrėžimą ir užduotis bus atlikta.
- Clone () yra greičiausias būdas kopijuoti masyvą.
Objektų klonavimo trūkumas
Toliau pateikiamas kai kurių klono() metodo trūkumų sąrašas:
- Norėdami naudoti Object.clone() metodą, turime pakeisti daug kodo sintaksių, pvz., įdiegti Cloneable sąsają, apibrėžti klono() metodą ir tvarkyti CloneNotSupportedException, galiausiai iškviesti Object.clone() ir kt.
- Turime įdiegti klonuojamą sąsają, kol joje nėra jokių metodų. Mes tiesiog turime jį naudoti norėdami pasakyti JVM, kad galime atlikti savo objekto klonavimą ().
- Object.clone() yra apsaugotas, todėl turime pateikti savo kloną() ir iš jo netiesiogiai iškviesti Object.clone().
- Object.clone() neiškviečia jokio konstruktoriaus, todėl mes negalime kontroliuoti objekto kūrimo.
- Jei norite parašyti klonavimo metodą antrinėje klasėje, visos jos superklasės turėtų apibrėžti klono () metodą jose arba paveldėti jį iš kitos pirminės klasės. Priešingu atveju super.clone() grandinė suges.
- Object.clone() palaiko tik seklų kopijavimą, bet turėsime jį nepaisyti, jei reikės gilaus klonavimo.
Klono() metodo pavyzdys (Objekto klonavimas)
Pažiūrėkime paprastą objektų klonavimo pavyzdį
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){} } }Išbandykite dabar
Output:101 amit 101 amitAtsisiųskite objektų klonavimo pavyzdį
Kaip matote aukščiau pateiktame pavyzdyje, abu nuorodos kintamieji turi tą pačią reikšmę. Taigi, klonas () nukopijuoja objekto reikšmes į kitą. Taigi, norint nukopijuoti objekto vertę į kitą, mums nereikia rašyti aiškaus kodo.
Jei sukursime kitą objektą pagal naują raktinį žodį ir jam priskirsime kito objekto reikšmes, tai reikės daug apdoroti šiame objekte. Taigi, norėdami išsaugoti papildomą apdorojimo užduotį, naudojame klono () metodą.