单人班
public class M_Singleton{
private volatile static M_Singleton uniqueInstance=null;
private ArraList<Integer> myArr;
private M_Signleton{
this.myArr=new ArrayList<Integer>();
}
public static M_Singleton getInstance(){
if(uniqueInstance==null){
synchronized (M_Signleton.class){
if(uniqueInstance==null)
uniqueInstance=new M_Signleton();
}
}
return uniqueInstance;
}
public void deleteInstance(){
uniqueInstance=null;
}
}
主班
M_Singleton ms=M_Singleton getInstance();
//put A-value in "MyArr"
sd.deleteInstance();
//put B-value in "MyArr"
我认为MyArr中只有B值 但是只有A值。
如果我这样更改deleteInstance,则仍然只有A值。
public void deleteInstance(){
uniqueInstance=new M_Singleton();
}
如何摧毁单身人士?
答案 0 :(得分:0)
将单例对象设置为null可以像这样破坏单例
uniqueInstance=null
答案 1 :(得分:0)
如果您确实想坚持使用 Singleton ,以下是重置单个实例的 Java反射方法:>
public static void setPrivateField(Class clazz, Object inst, String field, Object value) throws Exception {
java.lang.reflect.Field f = clazz.getDeclaredField(field);
f.setAccessible(true);
f.set(inst, value);
f.setAccessible(false);
}
只需在需要重置此 singleton 的地方调用此方法,如下所示:
setPrivateField(M_Singleton.class, null, "uniqueInstance", null);