logo

Objektkloning i Java

konstruktør i javaDet kloning af objekter er en måde at skabe nøjagtig kopi af et objekt. Clone()-metoden i klassen Object bruges til at klone et objekt.

Det java.lang.Klonbar grænseflade skal implementeres af den klasse, hvis objektklone vi vil oprette. Hvis vi ikke implementerer Cloneable interface, genererer clone() metoden CloneNotSupportedException .

Det clone() metode er defineret i klassen Object. Syntaksen for clone() metoden er som følger:

 protected Object clone() throws CloneNotSupportedException 

Hvorfor bruge clone() metoden?

Det clone() metode gemmer den ekstra behandlingsopgave for at skabe den nøjagtige kopi af et objekt. Hvis vi udfører det ved at bruge det nye søgeord, vil det tage meget behandlingstid at blive udført, derfor bruger vi objektkloning.

udskrivning af erklæring i java

Fordel ved objektkloning

Selvom Object.clone() har nogle designproblemer, er det stadig en populær og nem måde at kopiere objekter på. Følgende er en liste over fordele ved at bruge clone() metoden:

  • Du behøver ikke at skrive lange og gentagne koder. Brug blot en abstrakt klasse med en 4- eller 5-linjers lang klon()-metode.
  • Det er den nemmeste og mest effektive måde at kopiere objekter på, især hvis vi anvender det på et allerede udviklet eller et gammelt projekt. Du skal blot definere en overordnet klasse, implementere Cloneable i den, angive definitionen af ​​clone()-metoden, og opgaven vil blive udført.
  • Clone() er den hurtigste måde at kopiere array på.

Ulempe ved objektkloning

Følgende er en liste over nogle ulemper ved clone() metoden:

  • For at bruge Object.clone()-metoden skal vi ændre en masse syntakser til vores kode, som at implementere en Cloneable-grænseflade, definere clone()-metoden og håndtere CloneNotSupportedException, og endelig kalde Object.clone() osv.
  • Vi er nødt til at implementere en kloningsbar grænseflade, mens den ikke har nogen metoder i den. Vi skal bare bruge det til at fortælle JVM'en, at vi kan udføre clone() på vores objekt.
  • Object.clone() er beskyttet, så vi er nødt til at levere vores egen clone() og indirekte kalde Object.clone() fra den.
  • Object.clone() kalder ikke nogen konstruktør, så vi har ikke nogen kontrol over objektkonstruktionen.
  • Hvis du vil skrive en klonemetode i en underklasse, skal alle dens superklasser definere clone()-metoden i dem eller arve den fra en anden overordnet klasse. Ellers vil super.clone()-kæden mislykkes.
  • Object.clone() understøtter kun overfladisk kopiering, men vi bliver nødt til at tilsidesætte det, hvis vi har brug for dyb kloning.

Eksempel på clone() metode (Objektkloning)

Lad os se det enkle eksempel på objektkloning

 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){} } } 
Test det nu
 Output:101 amit 101 amit 
download eksemplet med objektkloning

Som du kan se i ovenstående eksempel, har begge referencevariabler den samme værdi. Således kopierer clone() værdierne af et objekt til et andet. Så vi behøver ikke at skrive eksplicit kode for at kopiere værdien af ​​et objekt til et andet.

gnist tutorial

Hvis vi opretter et andet objekt med et nyt nøgleord og tildeler værdierne af et andet objekt til dette, vil det kræve en masse behandling på dette objekt. Så for at gemme den ekstra behandlingsopgave bruger vi clone() metoden.