考虑我有一个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/

10-10 09:05