Örnek

Java'da Basit Bir Clone Örneği

Bu örnekte basit bir sınıfı kopyası alınabilir (clone) haline getirip kopyasını alıyoruz.
Test sınıfını kopyası alınabilir hale getiriyoruz. Bunun için Cloneable interface'ni implement ettikten sonra clone() yöntemini override ediyoruz:
public class Test implements Cloneable {
	
	private int no;
	private String name;
	
	public int getNo() {
		return no;
	}
	public void setNo(int no) {
		this.no = no;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	
	@Override
	protected Object clone() throws CloneNotSupportedException {
		return super.clone();
	}
}
Bu sınıfı kullanarak aşağıdaki gibi bir uygulama ile kopyasını alıyoruz ve özelliklerini değiştiriyoruz :
public class CloneTestApp {
	
	public static void main(String[] args) {
		
		Test t=new Test();
		t.setNo(1);
		t.setName("Tester");
		
		try {
			Test t2=(Test)t.clone();
			
			t2.setNo(2);
			t2.setName("Tester2");
			
			System.out.println("Orjinal:"+t.getNo()+","+t.getName());
			System.out.println("Kopya:"+t2.getNo()+","+t2.getName());
			
		} catch (CloneNotSupportedException e) {
			e.printStackTrace();
		}
		
	}
}
Uygulamayı çalıştırdığımızda aşağıdaki gibi bir çıktı vermektedir :
Orjinal:1,Tester
Kopya:2,Tester2
Görüldüğü gibi kopyası alınan nesnede değişiklik yaptığımızda asıl olan nesnede bir değişiklik olmamıştır.
Eğer Test sınıfı Cloneable interface'ni implement etmezse aşağıdaki gibi exception alınır:
java.lang.CloneNotSupportedException: com.fibiler.clone.Test
	at java.lang.Object.clone(Native Method)
	at com.fibiler.clone.Test.clone(Test.java:23)
	at com.fibiler.clone.CloneTestApp.main(CloneTestApp.java:12)
Eğer clone() ile değilde atama yoluyla ikinci bir nesne yaratsaydık örnek aşağıdaki gibi olurdu :
public class CloneTestApp2 {
	
	public static void main(String[] args) {
		
		Test t=new Test();
		t.setNo(1);
		t.setName("Tester");
		
		Test t2=t;
		
		t2.setNo(2);
		t2.setName("Tester2");
		
		System.out.println("Orjinal:"+t.getNo()+","+t.getName());
		System.out.println("Kopya:"+t2.getNo()+","+t2.getName());	
		
	}
}
Bu uygulamayı çalıştırdığımızda aşağıdaki gibi çıktı üretir :
Orjinal:2,Tester2
Kopya:2,Tester2

Görüldüğü gibi t2 nesnesinde yapılan değişiklikler t nesnesini de değiştirmiştir. Çünkü Test t2=t; şeklindeki atamalarda aslında iki değişken de aynı nesnesiyi göstermektedir.
Sonuç olarak kopyalamanın amacı yeni nesnede yapılan değişikliklerin asıl nesneyi değiştirmesini istememektir.
zafer.teker , 08.04.2022

Bu Sayfayı Paylaş:

Fibiler Üyelerinin Yorumları


Tüm üyeler içeriklere yorum ekleyerek katkıda bulunabilir : Yorum Gir

Misafir Yorumları




Bu Sayfayı Paylaş:

İletişim Bilgileri

Takip Et

Her Hakkı Saklıdır. Bu sitede yayınlanan tüm bilgi ve fikirlerin kullanımından fibiler.com sorumlu değildir. Bu sitede üretilmiş , derlenmiş içerikleri, fibiler.com'u kaynak göstermek koşuluyla kendi sitenizde kullanılabilirsiniz. Ancak telif hakkı olan içeriklerin hakları sahiplerine aittir