logo

Objektkloning i Java

konstruktör i javaDe objektkloning är ett sätt att skapa en exakt kopia av ett objekt. Clone()-metoden i klassen Object används för att klona ett objekt.

De java.lang.Klonbart gränssnitt måste implementeras av klassen vars objektklon vi vill skapa. Om vi ​​inte implementerar Cloneable Interface genererar clone() metoden CloneNotSupportedException .

De clone() metod definieras i klassen Object. Syntaxen för metoden clone() är som följer:

 protected Object clone() throws CloneNotSupportedException 

Varför använda metoden clone()?

De clone() metod sparar den extra bearbetningsuppgiften för att skapa den exakta kopian av ett objekt. Om vi ​​utför det genom att använda det nya nyckelordet kommer det att ta mycket bearbetningstid att utföra det är därför vi använder objektkloning.

Fördel med objektkloning

Även om Object.clone() har vissa designproblem, men det är fortfarande ett populärt och enkelt sätt att kopiera objekt. Följande är en lista över fördelar med att använda clone()-metoden:

  • Du behöver inte skriva långa och repetitiva koder. Använd bara en abstrakt klass med en 4- eller 5-raders lång clone()-metod.
  • Det är det enklaste och mest effektiva sättet att kopiera objekt, speciellt om vi applicerar det på ett redan utvecklat eller ett gammalt projekt. Definiera bara en överordnad klass, implementera Cloneable i den, ange definitionen av clone()-metoden och uppgiften kommer att göras.
  • Clone() är det snabbaste sättet att kopiera array.

Nackdel med objektkloning

Följande är en lista över några nackdelar med clone()-metoden:

  • För att använda metoden Object.clone() måste vi ändra många syntaxer i vår kod, som att implementera ett Cloneable-gränssnitt, definiera metoden clone() och hantera CloneNotSupportedException, och slutligen anropa Object.clone() etc.
  • Vi måste implementera kloningsbart gränssnitt medan det inte har några metoder i det. Vi måste bara använda den för att berätta för JVM att vi kan utföra clone() på vårt objekt.
  • Object.clone() är skyddad, så vi måste tillhandahålla vår egen clone() och indirekt anropa Object.clone() från den.
  • Object.clone() anropar inte någon konstruktor så vi har ingen kontroll över objektkonstruktionen.
  • Om du vill skriva en klonmetod i en underordnad klass bör alla dess superklasser definiera metoden clone() i dem eller ärva den från en annan överordnad klass. Annars kommer super.clone()-kedjan att misslyckas.
  • Object.clone() stöder endast ytlig kopiering men vi måste åsidosätta den om vi behöver djupkloning.

Exempel på clone()-metod (Objektkloning)

Låt oss se det enkla exemplet 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){} } } 
Testa det nu
 Output:101 amit 101 amit 
ladda ner exemplet på objektkloning

Som du kan se i exemplet ovan har båda referensvariablerna samma värde. Således kopierar clone() värdena för ett objekt till ett annat. Så vi behöver inte skriva explicit kod för att kopiera värdet av ett objekt till ett annat.

Om vi ​​skapar ett annat objekt med nytt nyckelord och tilldelar värdena för ett annat objekt till detta, kommer det att kräva mycket bearbetning på detta objekt. Så för att spara den extra bearbetningsuppgiften använder vi metoden clone().