search
Giriş
Merhabalar arkadaşlar, Sitemizi programlama ile ilgilenen bütün arkadaşlarımızın Türkçe içerik konusunda çektiği sıkıntılar düşünülerek soru/cevap şeklinde bir etkileşimde bulunabilmesi için kurduk. Umuyoruz hepimiz için güzel bir deneyim olur. Hasscript Ekibi
0 oy
500 gösterim
Bir objeyi klonlamak nedir? Nasıl olur?
Genel Kavramlar kategorisinde 6.2k puan

1 cevap

0 oy

Nesne yönelimli bir programlama dilinde (java/php/c#) hafızada yeni bir nesne örneği yarattığımız zaman bunu bir değişkene atıyoruz. Mesela ArrayList al = new ArrayList().  Daha sonra bu yaratılan örneğin bir kopyasını oluşturmak istediğimiz zaman ArrayList list = al gibi bir yöntemle ilerlersek hata yapmış oluruz. Çünkü bu tarz bir atamayla hafızada zaten olan al ile gösterilen nesne örneği ayrıca list ile gösterilmeye başlanmış olur. Tabi bu ilkel (primitive) tipler için geçerli değil. Yani int tipinde bir değişken olursa değeri kopyalanmış olur.

Peki bir objeden bir tane daha istediğimizde ne yapmalıyız?

Bunu için java'da clonable diye bir interface var. Bunu interface gerçekleştirilirse standard isimlendirme olarak clone metodu kullanılacaktır. Aşağıdaki örneğimize bir göz atalım

package com.hasscript.ornekler.clonable;

import java.util.ArrayList;
import java.util.List;

/**
 * http://hasscript.com/1456/obje-klonlama-nedir orneği
 *
 */
public class OrnekClone {

    static class Ulke implements Cloneable {
        List<String> sehirler = new ArrayList<>();
        String adi;
        int nufus;
        
        @Override
        public String toString() {
            return "Ulke [sehirler=" + sehirler + ", adi=" + adi + ", nufus=" + nufus + "]";
        }
        
        @Override
        protected Object clone() throws CloneNotSupportedException {
            Ulke u = new Ulke();
            u.adi = this.adi;
            u.nufus = this.nufus;
            u.sehirler.addAll(this.sehirler);
            return u;
        }
        
    }

    public static void main(String[] args) {
        Ulke ulke1 = new Ulke();
        ulke1.adi = "Türkiye";
        ulke1.nufus = 75000000;
        ulke1.sehirler.add("Tokat");
        ulke1.sehirler.add("Ankara");
        ulke1.sehirler.add("Istanbul");
        
        System.out.println("Ulke 1 :" + ulke1);
        
        Ulke ulke2 = new Ulke();
        ulke2.adi = "Fransa";
        ulke2.nufus = 60000000;
        ulke2.sehirler.add("Nice");
        ulke2.sehirler.add("Marsellie");
        ulke2.sehirler.add("Paris");
        
        System.out.println("Ulke 2 :" + ulke2);
        
        
        Ulke ulke3 = ulke1;
        
        System.out.println("Ulke1 Ulke3'e atandı / ulke3 :" + ulke3);
        
        ulke3.adi = "Italya";
        System.out.println("Ulke3 adı italya oldu / Ulke 1 :" + ulke1); // 3 değiştirildi ama bir ekrana basılıyor
        
        Ulke ulke4 = null;
        try {
            ulke4 = (Ulke) ulke2.clone();
        } catch (CloneNotSupportedException e) {
            e.printStackTrace();
        }
        ulke4.adi = "Danimarka";
        ulke4.nufus = 100;
        
        System.out.println("Ulke 4 :" + ulke4);
        
    }
}

Sonuc

Kod için

https://github.com/commandito/hasscript.com/blob/master/ornekler/src/main/java/com/hasscript/ornekler/clonable/OrnekClone.java

6.2k puan

İlgili sorular

0 oy
2 cevap 621 gösterim
621 gösterim
Java da mutable obje nedir?
2 Aralık 2016 Java kategorisinde kenan 6.2k puan sordu
0 oy
1 cevap 535 gösterim
535 gösterim
Java'da immutable obje nedir?
2 Aralık 2016 Java kategorisinde kenan 6.2k puan sordu
0 oy
1 cevap 212 gösterim
212 gösterim
https://pnpm.io/ https://www.npmjs.com/ https://yarnpkg.com/
9 Haziran 2023 Genel Kavramlar kategorisinde Barış Engin 1 102 puan sordu
0 oy
1 cevap 179 gösterim
179 gösterim 16 Ocak 2023 Genel Kavramlar kategorisinde kenan 6.2k puan sordu
0 oy
1 cevap 220 gösterim
220 gösterim
UI/UX kavramları ne anlama gelmektedir?
7 Mart 2022 Genel Kavramlar kategorisinde kenan 6.2k puan sordu