7

我有一个像这样创建的单身人士

private static class SingletonHolder { 
    public static Singleton INSTANCE = new Singleton();
}

public static Singleton getInstance() {
    return SingletonHolder.INSTANCE;
}

我想在某个时间重置单例实例。(我确信此时重置单例实例是安全的)。当我想重置它时,我尝试删除最终说明符并将实例设置为空,但问题是如何获取另一个实例(它将保持为空)

另一个问题是删除 SingletonHolder 中的 final 说明符是否安全。

谢谢

4

2 回答 2

4

如果你真的需要重置一个单例实例(这实际上没有多大意义),你可以将它的所有内部成员包装在一个私有对象中,并通过显式initialize()reset()方法重新初始化。这样,您可以保留您的单例状态并提供某种“重置”功能。

于 2013-10-06T16:17:01.853 回答
2

您将为其他类提供一个包可见(默认访问级别)方法,以便能够重置单例,就像这样

class SingleGuy{
 private static SingleGuy=new SingleGuy();//eager init mode
 synchronized static void initTheGuy(){
  SingleGuy=new SingleGuy();//while this not recommended!
 }
 synchronized static void resetTheInstance(){
  /*Reset the singleton state as you wish. just like you reinitialized*/
 } 
}
于 2013-10-06T16:18:52.203 回答