如何在Java中销毁或重置Singleton实例?

时间:2019-02-22 04:07:28

标签: java android singleton

单人班

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();
}

如何摧毁单身人士?

2 个答案:

答案 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);