Как уничтожить или сбросить экземпляр Singleton в Java? - PullRequest
0 голосов
/ 22 февраля 2019

Класс 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 голосов
/ 22 февраля 2019

Если вы действительно хотите придерживаться 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);
0 голосов
/ 22 февраля 2019

сделать одноэлементный объект пустым для уничтожения одноэлементного типа вот так

uniqueInstance=null
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...