考虑我有一个Singleton类,定义如下。
public class MySingleton implements Serializable{
private static MySingleton myInstance;
private MySingleton(){
}
static{
myInstance =new MySingleton();
}
public static MySingleton getInstance(){
return MySingleton.myInstance;
}
}
根据我的上述定义满足了Singleton的要求。添加的唯一额外行为是该类实现了可序列化的接口(interface)。
如果另一个类X获得了单例的实例并将其写入文件,然后在以后将其反序列化以获得另一个实例,则我们将有两个违反Singleton原理的实例。
我该如何避免这种情况,或者我在上述定义本身中错了。
最佳答案
最好的方法是使用枚举单例模式:
public enum MySingleton {
INSTANCE;
}
这样可以保证对象的单例性,并以始终获得相同实例的方式为您提供可序列化性。
更一般而言,您可以提供
readResolve()
方法,如下所示:protected Object readResolve() {
return myInstance;
}
关于java - 如何处理Singleton和序列化,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3930181/