logo

Objektu klonēšana Java

konstruktors javaThe objektu klonēšana ir veids, kā izveidot precīzu objekta kopiju. Objekta klonēšanai tiek izmantota objekta klases metode clone().

The java.lang.Klonējams interfeiss jārealizē klasei, kuras objekta klonu mēs vēlamies izveidot. Ja mēs neieviesīsim klonējamo saskarni, tiek ģenerēta metode clone(). CloneNotSupportedException .

The klona() metode ir definēts objektu klasē. Klona() metodes sintakse ir šāda:

 protected Object clone() throws CloneNotSupportedException 

Kāpēc izmantot clone() metodi?

The klona() metode saglabā papildu apstrādes uzdevumu, lai izveidotu precīzu objekta kopiju. Ja mēs to veicam, izmantojot jauno atslēgvārdu, tas prasīs daudz apstrādes laika, tāpēc mēs izmantojam objektu klonēšanu.

Objektu klonēšanas priekšrocības

Lai gan Object.clone() ir dažas dizaina problēmas, tas joprojām ir populārs un vienkāršs objektu kopēšanas veids. Tālāk ir sniegts klona () metodes izmantošanas priekšrocību saraksts:

  • Jums nav jāraksta gari un atkārtoti kodi. Vienkārši izmantojiet abstraktu klasi ar 4 vai 5 rindu garo clone() metodi.
  • Tas ir vienkāršākais un efektīvākais veids, kā kopēt objektus, it īpaši, ja mēs to izmantojam jau izstrādātam vai vecam projektam. Vienkārši definējiet vecāku klasi, ieviesiet tajā Cloneable, norādiet klona () metodes definīciju, un uzdevums tiks paveikts.
  • Clone () ir ātrākais veids, kā kopēt masīvu.

Objektu klonēšanas trūkums

Šeit ir saraksts ar dažiem klona () metodes trūkumiem:

  • Lai izmantotu metodi Object.clone(), mums ir jāmaina daudzas mūsu koda sintakses, piemēram, jāievieš Cloneable interfeiss, jādefinē clone() metode un jārīkojas CloneNotSupportedException un, visbeidzot, jāizsauc Object.clone() utt.
  • Mums ir jāievieš klonējams interfeiss, kamēr tajā nav nekādu metožu. Mums tas vienkārši ir jāizmanto, lai pateiktu JVM, ka mēs varam veikt clone () mūsu objektā.
  • Object.clone() ir aizsargāts, tāpēc mums ir jānodrošina savs klons() un no tā netieši jāizsauc Object.clone().
  • Object.clone() neizsauc nevienu konstruktoru, tāpēc mēs nevaram kontrolēt objektu konstrukciju.
  • Ja vēlaties rakstīt klona metodi pakārtotajā klasē, visām tās virsklasēm ir jādefinē klona () metode tajās vai jāpārmanto no citas vecākklases. Pretējā gadījumā ķēde super.clone() neizdosies.
  • Object.clone() atbalsta tikai seklu kopēšanu, taču mums tas būs jāignorē, ja mums ir nepieciešama dziļa klonēšana.

Klona() metodes piemērs (objektu klonēšana)

Apskatīsim vienkāršu objektu klonēšanas piemēru

 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){} } } 
Izmēģiniet to tagad
 Output:101 amit 101 amit 
lejupielādējiet objektu klonēšanas piemēru

Kā redzat iepriekš minētajā piemērā, abiem atsauces mainīgajiem ir vienāda vērtība. Tādējādi klons () kopē objekta vērtības uz citu. Tāpēc mums nav jāraksta skaidrs kods, lai kopētu objekta vērtību uz citu.

Ja mēs izveidosim citu objektu ar jaunu atslēgvārdu un piešķiram tam cita objekta vērtības, tas prasīs daudz šī objekta apstrādes. Tātad, lai saglabātu papildu apstrādes uzdevumu, mēs izmantojam clone() metodi.