web-dev-qa-db-ja.com

Javaで現在のオブジェクトをリセットする方法は?

MyObject内にFoo型のオブジェクトmyObjectがある場合、それ自体をリセットしてコンストラクターを再度実行する方法はありますか?

私は次のことがうまくいかないことを知っていますが、アイデアを伝えるのに役立つかもしれません。

this = new Foo();
6
user2519990

既存のインスタンスでコンストラクターを再度実行する方法はありません。ただし、次のように、最小限の作業でリセットできるようにコードを整理できます。

public class MyClass {
    public MyClass() {
        reset();
    }
    public void reset() {
        // Setup the instance
        this.field1 = ...
        this.field2 = ...
    }
}

注:resetメソッドでは、コンストラクターで通常設定するフィールドだけでなく、すべてのフィールドを設定する必要があります。たとえば、コンストラクターは、参照フィールドのnullへのデフォルトの初期化と、数値フィールドのゼロへの初期化に依存できます。 resetメソッドは、それらすべてを明示的に設定する必要があります。

14
dasblinkenlight

Nullを設定するか、new Object()を使用することをお勧めします

obj = null;
   or
obj = new Object();

ガベージコレクターは最終的にオブジェクトをクリアします

6

コードの推論が容易になる傾向があるため人気が高まっている別のアプローチは、オブジェクトを作成することです不変、状態を変更する(リセットするなど)代わりに、単に新しいオブジェクトを作成しますオブジェクト。

2
Robin Green

オブジェクトのすべての変数(nullまたは0またはデフォルト値)を「リセット」するメソッドを作成するだけです。

1
talnicolas

クラスのデフォルト値または状態のセットをクラス内に格納します。次に、クラス内のこれらすべてのデフォルトを復元するreset()メソッドを記述します。

public void reset(){
    // Reset everything to your default values
}
1
Alex Vulaj
@SuppressWarnings({ "unchecked" })
static void emptyObject(Object obj) 
{
     Class c1 = obj.getClass();
     Field[] fields = c1.getDeclaredFields();

     for(Field field : fields)
     {
          try
          {
               if(field.getType().getCanonicalName() == "boolean")
               {
                    field.set(obj, false);
               }
               else if(field.getType().getCanonicalName() == "char")
               {
                    field.set(obj, '\u0000');
               }
               else if((field.getType().isPrimitive()))
               {
                    field.set(obj, 0);
               }
               else
               {
                    field.set(obj, null);
               }
          }
          catch(Exception ex)
          {

          }
     }}
0
user6161504