2017-03-11 10 views
1

のコンストラクタに割り当てます?
それは可能ですか?自己私はこのようなクラスを持っているのjava

+1

ことができません:あなたは(私は別のstackoverflowの答えからそれをコピーし、それが正しいよう)あなたがコピーすることを意味するプロパティのゲッターとセッターを持っていることを期待して、このような 何か、。しかし、なぜあなたはそれをしますか?それとも、何をすべきだと思いますか? – TmTron

+0

(静的な) 'clone()'メソッドを作る方が良いのではないでしょうか? – c0der

+2

これはなぜですか?あなたが解決しようとしている実際の問題は何ですか? – EJP

答えて

3

いいえ、できません。 thisrezaは異なるオブジェクトを表します。コンストラクタ内で作成されているオブジェクトを既存のオブジェクトに置き換えることはできません。

の内容をrezaにコピーしてthisにすることができます。そのため、このような一連の割り当てを追加します。

public Reza(Reza reza) { 
    field1 = reza.field1; 
    field2 = reza.field2; 
    ... 
} 
0

いいえ、あなたはそれを行うことはできません。 thisは、設計上、読み取り専用の定数です。それに割り当てても意味がありません。

1

不可能ですが、すべてのプロパティを1つずつ(他の回答のように)コピーすることも、リフレクションによってコピーすることもできます。

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 
      } 

    } 
} 
関連する問題