是否有一种简单的方法可以清除实例中实例的所有字段?我的意思是,我想删除分配给实例字段的所有值。
ADDED
从主线程我开始一个窗口和另一个控制窗口状态的线程(例如,最后一个线程,显示某段时间的某些面板)。我有一个类,其中包含窗口的状态(用户在哪个阶段,他已经点击了哪些按钮)。
最后,用户可能想要从头开始整个过程(这是一个游戏)。所以,我决定了。因此,如果从头开始执行所有操作,我希望所有参数都是干净的(新鲜,未分配)。
ADDED
主线程创建在新线程中执行的新对象(旧线程完成)。所以,我无法从旧线程创建一个新对象。我只是在第二个帖子中有一个循环。
答案 0 :(得分:4)
我不明白。您如何以编程方式决定如何清除各个字段?
对于普通属性,它可以很容易(var = null
),但复合物或集合呢?它应该是collection = null
还是collection.removeAll()
?
这个问题正在寻找没有多大意义的synctactic糖。
最好的方法是编写自己的reset()
方法来自定义每个对象的行为。也许你可以使用
interface Resettable
{
void reset()
}
但仅此而已......
答案 1 :(得分:4)
是否有一种简单的方法可以清除实例中实例的所有字段?我的意思是,我想删除分配给实例字段的所有值。
是的,只需为每个人分配一个默认值即可。这将花费你大约20-30分钟。并将永远运行良好 *(YMMV)
创建一个方法:reset
并调用它
class YourClass {
int a;
int b;
boolean c;
double d;
String f;
// and so on...
public void method1(){}
public void method2(){}
public void method3(){}
// etc.
// Magic method, reset all the attributes of your instance...
public void reset(){
a = 0;
b = 0;
c = false;
d = 0.0;
f = "";
}
}
然后只需在代码中调用它:
....
YourClass object = new YourClass();
Thread thread = YourSpecificNewThread( object );
thread.start();
... // Later on you decide you have to reset the object just call your method:
object.reset(); // like new
我真的不知道这种方法的问题在哪里。
答案 2 :(得分:1)
您可以使用反射:
尝试这样的事情:
Field[] fields = object.getClass().getDeclaredFields();
for (Field f : fields) {
f.setAccessible(true);
f.set(object, null);
}
这不是一个美丽的解决方案,但可能对你有用。
答案 3 :(得分:0)
除了将null
设置为所有这些之外别无他法。
顺便说一句,我发现这是一个特别奇怪的想法。您最好重新创建一个新实例,而不是尝试重置旧实例。