• ReadResolve方法与序列化


    使用枚举实现的单例模式,不但可以防止利用反射强行构建单例对象,而且可以在枚举类对象被反序列化的时候,保证反序列的返回结果是同一对象。

    对于其他方式实现的单例模式,如果既想要做到可序列化,又想要反序列化为同一对象,则必须实现readResolve方法。

     一般来说, 一个类实现了 Serializable接口, 我们就可以把它往内存地写再从内存里读出而"组装"成一个跟原来一模一样的对象.

    不过当序列化遇到单例时,这里边就有了个问题: 从内存读出而组装的对象破坏了单例的规则. 单例是要求一个JVM中只有一个类对象的, 而现在通过反序列化,一个新的对象克隆了出来,与以前序列化的对象不能equlas。

    单例模式code:

    package com.qhong.designmodel.single;
    
    
    public final class MySingleton  {
        private MySingleton() { }
        private static final MySingleton INSTANCE = new MySingleton();
        public static MySingleton getInstance() { return INSTANCE; }
        
    }

    反序列化出同一个对象:

    package com.qhong.designmodel.single;
    
    
    import java.io.ObjectStreamException;
    import java.io.Serializable;
    
    public final class MySingleton implements Serializable {
        private MySingleton() { }
        private static final MySingleton INSTANCE = new MySingleton();
        public static MySingleton getInstance() { return INSTANCE; }
        private Object readResolve() throws ObjectStreamException {
            // instead of the object we're on,
            // return the class variable INSTANCE
            return INSTANCE;
        }
    }

    http://blog.163.com/hsh8523%40126/blog/static/218935592010520255261/

    http://mp.weixin.qq.com/s/1fQkkdtzYh_OikbYJnmZWg

  • 相关阅读:
    加密
    读取excel
    poj 1852 Ants
    关于运行时间
    poj 1001 Exponentiation
    Poj 3669 Meteor Shower
    一道简单题目的优化过程——抽签问题
    高精度四则运算
    Usaco_Contest_2013_Open_Bovine Problem 1. Bovine Ballet
    h5 音频 视频全屏设置
  • 原文地址:https://www.cnblogs.com/hongdada/p/8087279.html
Copyright © 2020-2023  润新知