我有一个像这样创建的单身人士
private static class SingletonHolder {
public static Singleton INSTANCE = new Singleton();
}
public static Singleton getInstance() {
return SingletonHolder.INSTANCE;
}
我想在特定时间重置单例实例。 (我确信此时重置单例实例是安全的)。我试图删除最终说明符并在我想重置它时将实例设置为null但问题是如何获取另一个实例(它将保持为null)
另一个问题是删除SingletonHolder中的最终说明符是否安全。
由于
答案 0 :(得分:4)
如果真的需要重置单例实例(实际上没有多大意义),您可以将其所有内部成员包装在私有对象中,并通过显式{{1}重新初始化}和initialize()
方法。
这样,您可以保留单身人士的利益,并提供某种“重置”功能。
答案 1 :(得分:1)
你会为其他类提供一个包可见(默认访问级别)方法,以便能够重置单例,如下所示
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*/
}
}