logo

Objectklonen in Java

constructeur in JavaDe klonen van objecten is een manier om een ​​exacte kopie van een object te maken. De methode clone() van de klasse Object wordt gebruikt om een ​​object te klonen.

De java.lang.Kloonbare interface moet worden geïmplementeerd door de klasse waarvan we de objectkloon willen maken. Als we de Cloneable-interface niet implementeren, genereert de clone()-methode CloneNotSupportedException .

De kloon() methode wordt gedefinieerd in de Object-klasse. De syntaxis van de clone()-methode is als volgt:

 protected Object clone() throws CloneNotSupportedException 

Waarom de clone() methode gebruiken?

De kloon() methode slaat de extra verwerkingstaak op voor het maken van de exacte kopie van een object. Als we dit uitvoeren met behulp van het nieuwe trefwoord, kost het veel verwerkingstijd. Daarom gebruiken we objectklonen.

Voordeel van objectklonen

Hoewel Object.clone() enkele ontwerpproblemen kent, is het nog steeds een populaire en gemakkelijke manier om objecten te kopiëren. Hieronder volgt een lijst met voordelen van het gebruik van de clone()-methode:

  • U hoeft geen lange en repetitieve codes te schrijven. Gebruik gewoon een abstracte klasse met een clone()-methode van 4 of 5 regels.
  • Het is de gemakkelijkste en meest efficiënte manier om objecten te kopiëren, vooral als we het toepassen op een reeds ontwikkeld of oud project. Definieer gewoon een ouderklasse, implementeer Cloneable daarin, geef de definitie van de clone() -methode op en de taak zal worden uitgevoerd.
  • Clone() is de snelste manier om array te kopiëren.

Nadeel van het klonen van objecten

Hieronder volgt een lijst met enkele nadelen van de clone()-methode:

  • Om de Object.clone()-methode te gebruiken, moeten we veel syntaxis in onze code veranderen, zoals het implementeren van een Cloneable-interface, het definiëren van de clone()-methode en het omgaan met CloneNotSupportedException, en ten slotte het aanroepen van Object.clone() enz.
  • We moeten een kloonbare interface implementeren terwijl er geen methoden in zitten. We hoeven het alleen maar te gebruiken om de JVM te vertellen dat we clone() op ons object kunnen uitvoeren.
  • Object.clone() is beveiligd, dus we moeten onze eigen kloon() leveren en er indirect Object.clone() van aanroepen.
  • Object.clone() roept geen enkele constructor aan, dus we hebben geen enkele controle over de objectconstructie.
  • Als u een kloonmethode in een onderliggende klasse wilt schrijven, moeten alle superklassen de kloon()-methode daarin definiëren of deze overnemen van een andere bovenliggende klasse. Anders zal de keten super.clone() mislukken.
  • Object.clone() ondersteunt alleen oppervlakkig kopiëren, maar we zullen dit moeten overschrijven als we diep klonen nodig hebben.

Voorbeeld van de clone()-methode (objectklonen)

Laten we eens kijken naar het eenvoudige voorbeeld van het klonen van objecten

 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 het nu
 Output:101 amit 101 amit 
download het voorbeeld van objectklonen

Zoals u in het bovenstaande voorbeeld kunt zien, hebben beide referentievariabelen dezelfde waarde. De kloon() kopieert dus de waarden van een object naar een ander object. We hoeven dus geen expliciete code te schrijven om de waarde van een object naar een ander object te kopiëren.

Als we een ander object maken met een nieuw trefwoord en de waarden van een ander object aan dit object toewijzen, zal dit veel verwerking van dit object vereisen. Om de extra verwerkingstaak op te slaan, gebruiken we de clone()-methode.