思想:

  一个单例类,无论采取哪一种设计(单元素枚举类除外), 一旦间接或者直接实现 Serializable 接口,为了保证单例,就要多增加一点考虑:保证类在反序列化之后能够保证单例。

public final class SerializableSingletonFail implements Serializable {

    private static final long serialVersionUID = 3355486892283807446L;

    private static final SerializableSingletonFail instance = new SerializableSingletonFail();

    private SerializableSingletonFail() {
if (instance != null) {
throw new IllegalStateException();
}
} public static final SerializableSingletonFail getInstance() {
return instance;
} }

  以上是一个单例的简单饿汉模式实现,实现了 Serializable 接口。从类名上也不难看出,这是个错误示例。

  每一个类中,有两个很特殊的方法,分别是 writeReplace() 和 readResolve() 。

  前者保证,无论从什么对象序列化,只要是序列化这个类,都会把 writeReplace() 的返回对象序列化进文件;

  后者保证,无论从什么文件反序列化,都会反序列化成 readResolve() 的返回对象。

  这两个方法,对于方法签名有着严格的限定,包括入参(没有入参)和返回类型(Object),但是可以接受抛出不同的异常。

  建议将这两个方法的控制符设为 private,防止外部类的误操作。

public final class SerializableSingleton implements Serializable {

    private static final long serialVersionUID = -6451544700567522443L;

    private static final SerializableSingleton instance = new SerializableSingleton();

    private SerializableSingleton() {
if (instance != null) {
throw new IllegalStateException();
}
} public static final SerializableSingleton getInstance() {
return instance;
} private Object readResolve() {
return instance;
} }

最新文章

  1. Python QQ群
  2. [ucgui] 对话框4——模式消息窗口
  3. 使用Cloudera部署,管理Hadoop集群
  4. js+CSS实现模拟华丽的select控件下拉菜单效果
  5. 利用URLScan工具过滤URL中的特殊字符(仅针对IIS6)
  6. 请问JDBC中IN语句怎么构建
  7. 关于 vim每次w时都提示 “E509: 无法创建备份文件 (请加 ! 强制执行)”
  8. 音量强度转分贝db
  9. equals()与hashCode()方法协作约定
  10. log4j2教程【RollingFileAppender】
  11. 数学模块_math
  12. (3).NET CORE微服务 Micro-Service ---- Consul服务治理
  13. easyui Tree树形控件的异步加载
  14. Android 工程目录
  15. [翻译]解读CSS中的长度单位
  16. Codeforces 703E DP + 因数分解 +离散化
  17. 当你启动Redis的时候,Redis做了什么
  18. arm上sd卡热插拔问题的解决:
  19. _GNU_SOURCE宏
  20. 简单的CSS3鼠标滑过图片标题和遮罩层动画特效

热门文章

  1. HDU 3592 World Exhibition (差分约束,spfa,水)
  2. python基础教程总结7——异常
  3. Cocos2d-x——导入Cocostudio资源
  4. [VC]关于ocx控件的自己编写的dll问题
  5. [numpy] 基础练习 (一)
  6. C#基于联通短信Sgip协议构建短信网关程序
  7. 简单的Datable转List方法
  8. JS数据结构及算法(一) 堆栈
  9. 哈希表(Hash Table)/散列表(Key-Value)
  10. CF-1114 (2019/02/11)