如何在Java中重置当前对象?

时间:2013-12-04 21:33:02

标签: java object this reset

如果我有一个类型为Foo的对象myObject,而在myObject中,有没有办法重置自己并再次运行构造函数?

我知道以下内容不起作用,但可能有助于传达这一想法。

this = new Foo();

6 个答案:

答案 0 :(得分:13)

无法在现有实例上再次运行构造函数。但是,您可以组织代码,以便以最少的工作量进行重置,如下所示:

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

注意:您的reset方法需要设置所有字段,而不仅仅是您通常在构造函数中设置的字段。例如,您的构造函数可以依赖于null的引用字段和数字字段的默认初始化为零;您的reset方法需要明确地设置它们。

答案 1 :(得分:6)

最好设置null或使用新的Object()

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

垃圾收集器最终将清除对象

答案 2 :(得分:2)

一种替代方法,它越来越受欢迎,因为它往往使代码更易于推理,是使你的对象不可变,而不是改变它们的状态(例如重置它们),简单创建一个新对象。

答案 3 :(得分:1)

只需编写一个方法来“重置”对象的所有变量(null或0或默认值)。

答案 4 :(得分:1)

为您的类存储一组默认值或状态。然后编写一个reset()方法,该方法将恢复该类中的所有这些默认值。

public void reset(){
    // Reset everything to your default values
}

答案 5 :(得分:0)

@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)
          {

          }
     }}