2017-07-11 5 views
3

Ich habe eine ziemlich allgemeine Frage über Java. Ich möchte wissen, ob es eine einfache Möglichkeit, diese C++ Code in Java neu zu erstellen:Java Copy Constructor mit dem "this" Schlüsselwort

class A 
{ 

public: 
    int first; 
    int second; 

    A(const A& other) { 
    *this = other; 
    } 

... 
} 

Also im Grunde eine Kopie Konstruktor, wo Sie ein vorhandenes Objekt A ein neues Objekt von einem in den Konstruktor übergeben kann, und es wird den Inhalt kopieren und eine exakte Kopie des vorhandenen Objekts von A.

versucht

class A { 
    int first; 
    int second; 

    public A(A other){   
    this = other; 
    } 
... 
} 

leider funktioniert nicht bauen, da eclipse mir sagt, „das“ nicht auf der linken Seite der erlaubten eine Zuweisung, da es keine Variable ist.

Ich weiß, ich würde die gleichen Ergebnisse erzielen zu tun:

class A { 
     int first; 
     int second; 

     public A(A other){   
     this.first = other.first; 
     this.second = other.second; 

     } 
    ... 
    } 

Aber ich würde gerne wissen, ob es ein einfacher Weg ist, da man manchmal ein paar Klassenvariablen hat.

Vielen Dank im Voraus!

+1

Sie könnten einen privaten Konstruktor erstellen, der all Ihre Variablen aufnimmt und von allen anderen Konstruktoren in irgendeiner Weise aufgerufen wird. – Charles

+1

Sie meinen einen Konstruktor, der eine Instanz dieses Objekts aufnimmt und dann seine Daten kopiert. Das ist wahrscheinlich so einfach wie es nur geht. – Daedric

+0

@Daedric genau - aber ohne seine Variablen einzeln kopieren zu müssen. (Ich fragte mich, ob ich das Wort "Copy Constructor" missbraucht hatte, nachdem ich die Frage gestellt hatte - führte das zu Verwirrung?) – kalu

Antwort

1

Es gibt keine einfachere Art und Weise durch die Sprache Java definiert, jedoch gibt es einige schwierige Techniken, die Sie tun erlauben kann:

  1. Objekt Clone via Serialisierung: http://www.avajava.com/tutorials/lessons/how-do-i-perform-a-deep-clone-using-serializable.html: precondition - Alle Eigenschaften der Klasse in der Struktur müssen entweder primitiv oder von einer Klasse sein, die als Serializable
  2. toString() -> fromString (String s) - entspricht Methoden
  3. POJO und Bohnen umgesetzt werden muss, um leicht zwischen XML/JSON-Darstellung mit den verfügbaren Bibliotheken wie Jackson usw. Meines Wissens

rekonstruiert werden unter Verwendung der effizienteste Weg nach direkte Abbildung durch Serialisierungsmechanismus ist.

+0

Okay, vielen Dank, ich werde mir die Serialisierung ansehen! – kalu

+0

Ja Serialisierung ist gut, aber es wäre mehr im Gegensatz zu einem einfachen Konstruktor beteiligt. – Daedric

1

Was Sie in der dritten Version dieser Klasse haben, ist legales Java, das das gleiche tut wie Ihre C++ - Klasse, aber ich glaube nicht, dass es einen einfacheren Weg als das gibt, was Sie geschrieben haben.

1

beste Weg, um Code zu recyceln:

class A { 

    int first; 
    int second; 

    public A(int f, int s){   
     this.first = f; 
     this.second = s; 
    } 

    public A(A a){ 
     this(a.first, a.second); // id use getters instead ofc. 
    } 
}