2010-03-29 19 views
6

Varolan bir nesneyi başka bir bilgisayara kopyalamayı başarmanın genel bir yolu var mı?Nesneyi başka bir nesneye kopyalama

MyObj'un id ve name alanlarına sahip olduğunu varsayalım. Bunun gibi: Aşağıdaki şekilde

MyObj myObj_1 = new MyObj(1, "Name 1"); 
MyObj myObj_2 = new MyObj(2, "Name 2"); 

yerine

myObj_2.setName(myObj_1.getName()) // etc for each field 

şey yapmak:

myObj_2.copyFrom(myObj_1) 

yüzden farklı örnekleridir ancak eşit özelliklere sahip olduğunu.

+1

http://stackoverflow.com/questions/64036/how-do-you-make-a-deep-copy-of-an-object – karlipoppins

+1

Bu [Cevap] (http: // stackoverflow. com/questions/869033/how-do-i-copy-an-object-in-java/9834683 # 9834683) yardımcı olacaktır. –

cevap

4
+3

Bu doğru olmasına rağmen, Joshua Bloch, Etkin Java'da klon kullanımı konusunda uyardı. Bir kopya oluşturucu oluşturmak daha iyidir. –

0

klon() - yöntem tam olarak bu iş içindir.

8

kongre kendi türünde tek bir parametre alan bir kurucu ile inşaat anda bu yapmaktır.

myObj myObj_2 = Yeni myObj (myObj_1);

diğerinden bir nesnenin varolan özelliklerinin üzerine hiçbir Java kural yoktur. Bu, Java'daki değişmez nesnelerin tercihine karşı gitme eğilimindedir (iyi bir neden olmadığı sürece özelliklerin inşaat zamanında ayarlandığı durumlarda).

Düzenleme: o sözdizimi ve diğer sakıncaları yitirmiş çünkü ilişkin klon(), birçok mühendis, modern Java bu vazgeçirmek. http://www.javapractices.com/topic/TopicAction.do?Id=71

0

Klon rutinlerinin uygulanmasını otomatikleştirmek için iç gözlemi kullanabilirsiniz, böylece bazı alanları kopyalamayı ihmal etmediğinizden emin olabilirsiniz.

7

Kullanım kopya yapıcısı:

public class YourObject { 
    private String name; 
    private int age; 

    public YourObject(YourObject other) { 
    this.name = other.name; 
    this.age = other.age; 
    } 
} 
0

clone() yöntem bu gereksinimleri için en uygun olanıdır. Bir nesne üzerinde clone() yöntemi çağrıldığında, JVM aslında yeni bir nesne oluşturacak ve önceki nesnenin tüm içeriğini yeni oluşturulan nesneye kopyalayacaktır. clone() yöntemini kullanmadan önce, Cloneable arabirimini uygulamanız ve clone() yöntemini geçersiz kılmanız gerekir.

public class CloneExample implements Cloneable 
{ 
    int id; 
    String name; 

    CloneExample(int id, String name) { 
     this.id = id; 
     this.name = name; 
    } 

    @Override 
    protected Object clone() throws CloneNotSupportedException { 
     return super.clone(); 
    } 

    public static void main(String[] args) { 
     CloneExample obj1 = new CloneExample(1,"Name_1"); 

     try { 
      CloneExample obj2 = (CloneExample) obj1.clone(); 
      System.out.println(obj2.id); 
      System.out.println(obj2.name); 
     } catch (CloneNotSupportedException e) { 
      e.printStackTrace(); 
     } 
    } 
} 
İlgili konular