写singleton类需要注意的一点问题(Sington类的序列化)

为了使Singleton类变成可序列化的(serializable),仅仅实现Serializable接口是不够的。为了维护Singleton的单例性,你必须给Singleton类提供一个readResolve方法,否则的话,一个序列化的实例,每次反序列化的时候都会产 生一个新的实例。Singleton 也不会例外。如下所示:

输出结果为:false

解决方法是为Singleton类增加readResolve()方法:

 


再进行测试:输出结果为true

反序列化之后新创建的对象会先调用此方法,该方法返回的对象引用被返回,取代了新创建的对象。

本质上,该方法忽略了新建对象,仍然返回类初始化时创建的那个实例。


 
 

                            

你可能感兴趣的:(Singleton)