logo

Java'da Nesne Klonlama

Java'da yapıcı nesne klonlama bir nesnenin tam kopyasını oluşturmanın bir yoludur. Object sınıfının clone() yöntemi bir nesneyi klonlamak için kullanılır.

java.lang.Klonlanabilir arayüz nesne klonunu oluşturmak istediğimiz sınıf tarafından uygulanmalıdır. Klonlanabilir arayüzü uygulamazsak clone() yöntemi şunu oluşturur: KlonDesteklenmeyen İstisna .

klon() yöntemi Object sınıfında tanımlanır. clone() yönteminin sözdizimi aşağıdaki gibidir:

pyspark
 protected Object clone() throws CloneNotSupportedException 

Neden clone() yöntemini kullanmalısınız?

klon() yöntemi bir nesnenin tam kopyasını oluşturmak için ekstra işlem görevini kaydeder. Eğer bunu new anahtar sözcüğünü kullanarak gerçekleştirirsek, çok fazla işlem süresi alacaktır, bu yüzden nesne klonlamayı kullanıyoruz.

Nesne klonlamanın avantajı

Object.clone()'un bazı tasarım sorunları olmasına rağmen, nesneleri kopyalamanın hala popüler ve kolay bir yoludur. clone() yöntemini kullanmanın avantajlarının listesi aşağıdadır:

  • Uzun ve tekrarlayan kodlar yazmanıza gerek yok. Sadece 4 veya 5 satırlık uzun clone() yöntemiyle soyut bir sınıf kullanın.
  • Özellikle halihazırda geliştirilmiş veya eski bir projeye uyguluyorsak, nesneleri kopyalamanın en kolay ve en etkili yoludur. Sadece bir ana sınıf tanımlayın, içinde Cloneable'ı uygulayın, clone() yönteminin tanımını sağlayın ve görev tamamlanacaktır.
  • Clone() diziyi kopyalamanın en hızlı yoludur.

Nesne klonlamanın dezavantajı

clone() yönteminin bazı dezavantajlarının listesi aşağıdadır:

  • Object.clone() yöntemini kullanmak için, Cloneable bir arayüz uygulamak, clone() yöntemini tanımlamak ve CloneNotSupportedException'ı işlemek ve son olarak Object.clone()'u çağırmak gibi kodumuzda birçok sözdizimini değiştirmemiz gerekir.
  • İçinde herhangi bir yöntem olmasa da klonlanabilir bir arayüz uygulamak zorundayız. Bunu JVM'ye nesnemizde clone() gerçekleştirebileceğimizi söylemek için kullanmamız gerekiyor.
  • Object.clone() korumalıdır, dolayısıyla kendi clone()'umuzu sağlamalı ve dolaylı olarak ondan Object.clone()'u çağırmalıyız.
  • Object.clone() herhangi bir kurucuyu çağırmaz, dolayısıyla nesne yapımı üzerinde herhangi bir kontrolümüz yoktur.
  • Bir alt sınıfta bir klon yöntemi yazmak istiyorsanız, o zaman bu sınıfın tüm üst sınıfları, clone() yöntemini kendilerinde tanımlamalı veya onu başka bir ana sınıftan miras almalıdır. Aksi halde super.clone() zinciri başarısız olur.
  • Object.clone() yalnızca sığ kopyalamayı destekler ancak derin klonlamaya ihtiyacımız olursa bunu geçersiz kılmamız gerekecektir.

clone() yöntemi örneği (Nesne klonlama)

Nesne klonlamanın basit örneğini görelim

mark zuckerberg eğitimi
 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){} } } 
Şimdi Test Edin
 Output:101 amit 101 amit 
nesne klonlama örneğini indir

Yukarıdaki örnekte görebileceğiniz gibi her iki referans değişkeni de aynı değere sahiptir. Böylece clone() bir nesnenin değerlerini diğerine kopyalar. Dolayısıyla bir nesnenin değerini diğerine kopyalamak için açık kod yazmamıza gerek yok.

Eğer new anahtar sözcüğü ile başka bir nesne oluşturup buna başka bir nesnenin değerlerini atarsak, bu nesne üzerinde çok fazla işlem yapılması gerekecektir. Bu yüzden ekstra işlem görevini kaydetmek için clone() yöntemini kullanıyoruz.