2010-03-29 4 views
6

Gibt es eine generische Möglichkeit, ein bestehendes Objekt in ein anderes zu kopieren?Objekt in ein anderes kopieren

Angenommen MyObj hat eine id und name Felder. Wie folgt aus:

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

Statt

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

etwas tun, wie folgend:

myObj_2.copyFrom(myObj_1) 

, so dass sie verschiedene Instanzen sind, haben aber gleich Eigenschaften.

+1

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

+1

Diese [Antwort] (http: // Stackoverflow. com/questions/869033/how-do-i-Kopie-ein-Objekt-in-java/9834683 # 9834683) wird Ihnen helfen. –

Antwort

4
+3

Obwohl dies korrekt ist, warnt Joshua Bloch davor, in Effective Java den Klon zu verwenden. Besser, einen Kopierkonstruktor zu erstellen. –

0

Der Klon() - ist Methode für genau diesen Job.

8

Die Konvention besteht darin, dies zur Konstruktionszeit mit einem Konstruktor zu tun, der einen Parameter seines eigenen Typs annimmt.

MyObj myObj_2 = neu MyObj (myObj_1);

Es gibt keine Java-Konvention zum Überschreiben der vorhandenen Eigenschaften eines Objekts von einem anderen. Dies neigt dazu, gegen die Präferenz für unveränderliche Objekte in Java zu gehen (wo Eigenschaften zur Konstruktionszeit gesetzt werden, es sei denn, es gibt einen guten Grund, dies nicht zu tun).

Edit: in Bezug auf clone(), viele Ingenieure entmutigen dies in modernen Java, weil es veraltete Syntax und andere Nachteile hat. http://www.javapractices.com/topic/TopicAction.do?Id=71

0

Sie können Introspektion verwenden, um die Implementierung Ihrer Klonroutinen zu automatisieren, so dass Sie sicher sein können, dass Sie nicht vergessen, einige Felder zu kopieren.

7

Verwenden Copykonstruktor:

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

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

Die clone() Methode ist am besten für diese Anforderungen geeignet. Wenn die Methode clone() für ein Objekt aufgerufen wird, erstellt die JVM ein neues Objekt und kopiert den gesamten Inhalt des vorherigen Objekts in das neu erstellte Objekt. Bevor Sie die Methode clone() verwenden, müssen Sie die Schnittstelle Cloneable implementieren und die Methode clone() überschreiben.

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(); 
     } 
    } 
} 
Verwandte Themen