logo

Klonowanie obiektów w Javie

konstruktor w JavieThe klonowanie obiektów to sposób na utworzenie dokładnej kopii obiektu. Do klonowania obiektu używana jest metoda clone() klasy Object.

The Interfejs java.lang.Klonowany musi być zaimplementowany przez klasę, której klon obiektowy chcemy utworzyć. Jeśli nie zaimplementujemy interfejsu Cloneable, wygenerowana zostanie metoda clone(). CloneNotSupportedException .

The metoda klonowania(). jest zdefiniowany w klasie Object. Składnia metody clone() jest następująca:

 protected Object clone() throws CloneNotSupportedException 

Po co używać metody clone()?

The metoda klonowania(). oszczędza dodatkowe zadanie przetwarzania związane z utworzeniem dokładnej kopii obiektu. Jeśli wykonamy to przy użyciu słowa kluczowego new, przetwarzanie zajmie dużo czasu, dlatego używamy klonowania obiektów.

Zaleta klonowania obiektów

Chociaż metoda Object.clone() ma pewne problemy projektowe, nadal jest popularnym i łatwym sposobem kopiowania obiektów. Poniżej znajduje się lista zalet stosowania metody clone():

  • Nie musisz pisać długich i powtarzalnych kodów. Po prostu użyj klasy abstrakcyjnej z 4- lub 5-liniową metodą clone().
  • Jest to najłatwiejszy i najskuteczniejszy sposób kopiowania obiektów, szczególnie jeśli stosujemy go do już opracowanego lub starego projektu. Wystarczy zdefiniować klasę nadrzędną, zaimplementować w niej Cloneable, podać definicję metody clone() i zadanie zostanie wykonane.
  • Clone() to najszybszy sposób kopiowania tablicy.

Wady klonowania obiektów

Poniżej znajduje się lista niektórych wad metody clone():

liczba do ciągu Java
  • Aby użyć metody Object.clone() , musimy zmienić wiele składni naszego kodu, na przykład zaimplementować interfejs Cloneable, zdefiniować metodę clone() i obsługę CloneNotSupportedException, a na koniec wywołać Object.clone() itp.
  • Musimy zaimplementować klonowalny interfejs, gdy nie ma w nim żadnych metod. Musimy go po prostu użyć, aby poinformować maszynę JVM, że możemy wykonać funkcję clone() na naszym obiekcie.
  • Obiekt.clone() jest chroniony, więc musimy udostępnić własny clone() i pośrednio wywołać z niego Object.clone().
  • Object.clone() nie wywołuje żadnego konstruktora, więc nie mamy żadnej kontroli nad konstrukcją obiektu.
  • Jeśli chcesz napisać metodę clone w klasie potomnej, wszystkie jej nadklasy powinny definiować w sobie metodę clone() lub dziedziczyć ją z innej klasy nadrzędnej. W przeciwnym razie łańcuch super.clone() nie powiedzie się.
  • Funkcja Object.clone() obsługuje tylko płytkie kopiowanie, ale będziemy musieli ją zastąpić, jeśli będziemy potrzebować głębokiego klonowania.

Przykład metody clone() (klonowanie obiektu)

Zobaczmy prosty przykład klonowania obiektów

 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){} } } 
Przetestuj teraz
 Output:101 amit 101 amit 
pobierz przykład klonowania obiektów

Jak widać w powyższym przykładzie, obie zmienne referencyjne mają tę samą wartość. Zatem clone() kopiuje wartości jednego obiektu do innego. Nie musimy więc pisać jawnego kodu, aby skopiować wartość obiektu do innego.

Jeśli utworzymy kolejny obiekt za pomocą słowa kluczowego new i przypiszemy do niego wartości innego obiektu, będzie to wymagało dużo przetwarzania tego obiektu. Aby więc zaoszczędzić dodatkowe zadanie przetwarzania, używamy metody clone().