2017-03-11 5 views
1

Ich habe eine Klasse wie folgt:Selbst zuweisen in Konstruktor von Java

this = reza 

Wie kann ich tun:

public class Reza { 
    public Reza(Reza reza) { 

    } 
} 

I reza der Eingangsparameter Konstruktor aktuellen Objekt wie folgt ersetzt werden soll ?
ist es möglich?

+1

Es ist nicht möglich. Aber die Frage ist, warum würdest du das tun? Oder was denkst du, sollte es tun? – TmTron

+0

Wäre es nicht besser, eine (statische) 'clone()' Methode zu erstellen? – c0der

+2

Sie wollen das warum? Was ist das eigentliche Problem, das Sie versuchen zu lösen? – EJP

Antwort

3

Nein, das ist nicht möglich. this und reza repräsentieren verschiedene Objekte; Sie können das in einem Konstruktor erstellte Objekt nicht durch ein vorhandenes Objekt ersetzen.

Sie können jedoch kopieren der Inhalt reza in this. Fügen Sie dazu eine Reihe von Zuordnungen hinzu:

0

Nein, das geht nicht. this ist von Grund auf eine schreibgeschützte Konstante. Zuweisen macht keinen Sinn.

1

Unmöglich, aber Sie können alle Ihre Eigenschaften eins nach dem anderen (wie andere Antwort) oder durch Reflexion kopieren. So etwas wie dies, in der Hoffnung, dass Sie Getter und Setter für die Eigenschaften haben Sie bedeuten zu kopieren (ich es von einer anderen Stackoverflow Antwort kopiert und es sieht richtig):

public Reza(Reza reza) { 
    Method[] gettersAndSetters = reza.getClass().getMethods(); 

    for (int i = 0; i < gettersAndSetters.length; i++) { 
      String methodName = gettersAndSetters[i].getName(); 
      try{ 
       if(methodName.startsWith("get")){ 
       this.getClass().getMethod(methodName.replaceFirst("get", "set") , gettersAndSetters[i].getReturnType()).invoke(this, gettersAndSetters[i].invoke(reza, null)); 
        }else if(methodName.startsWith("is")){ 
         this.getClass().getMethod(methodName.replaceFirst("is", "set") , gettersAndSetters[i].getReturnType() ).invoke(this, gettersAndSetters[i].invoke(reza, null)); 
        } 

      }catch (NoSuchMethodException e) { 
       // TODO: handle exception 
      }catch (IllegalArgumentException e) { 
       // TODO: handle exception 
      } 

    } 
} 
Verwandte Themen