Effective Java之保护性编写readObject方法(七十六)
readObject方法实际上相当于另一个公有的构造器,与其他构造器一样,它也需要进行参数的有效性检查与保护性拷贝。参考:Effective Java之必要时进行保护性拷贝(三十九)
原因很简单,为了避免客户端修改可变对象,服务器把可变对象的引用指向了客户端找不到的地方,但是默认反序列化的过程把客户端找不到的地方给了客户端,给了客户端修改的机会,导致了错误,readObject也应该完成构造器做的事。
private void readObject(ObjectInputStream s)
throws IOException, ClassNotFoundException {
s.defaultReadObject();
// Defensively copy our mutable components
start = new Date(start.getTime());
end = new Date(end.getTime());
// Check that our invariants are satisfied
if (start.compareTo(end) > 0)
throw new InvalidObjectException(start +" after "+ end);
}
private void readObject(ObjectInputStream s)
throws IOException, ClassNotFoundException {s.defaultReadObject();start = new Date(start.getTime());end = new Date(end.getTime());if (start.compareTo(end) > 0)throw new InvalidObjectException(start +" after "+ end);
}
Effective Java之保护性编写readObject方法(七十六)相关推荐
- Effective Java之避免使用终结方法(七)
1.终结方法的缺点 1.终结方法不能保证及时执行,因此注重时间的任务不应该由终结方法来完成.例如:用终结方法去关闭已经打开的文件,这是一种严重错误,因为打开文件描述符是一种很有限的资源,如果jvm延迟 ...
- Effective Java之谨慎地实现Serializable(七十四)
1.序列化的含义和作用 序列化用来将对象编码成字节流,反序列化就使将字节流编码重新构建对象. 序列化实现了对象传输和对象持久化,所以它能够为远程通信提供对象表示法,为JavaBean组件提供持久化数据 ...
- Effective Java之坚持使用Overide注解(三十六)
@Override 注解: 表示被注解的方法声明覆盖了超类型中的一个声明 1.我们应该在想要覆盖超类声明的每个方法声明中使用 Override 注解 ; 如果使用了Override注解的方法是重载而不 ...
- 第七十六章 方法关键字 - SoapAction
文章目录 第七十六章 方法关键字 - SoapAction 用法 详情 默认 WSDL的关系 对消息的影响 第七十六章 方法关键字 - SoapAction 指定当通过HTTP将此方法作为web方法调 ...
- 七十六、Python | Leetcode二分查找和分治算法系列
@Author:Runsen @Date:2020/7/4 人生最重要的不是所站的位置,而是内心所朝的方向.只要我在每篇博文中写得自己体会,修炼身心:在每天的不断重复学习中,耐住寂寞,练就真功,不畏艰 ...
- (七十六):Masked Autoencoders Are Scalable Vision Learners
(七十六):Masked Autoencoders Are Scalable Vision Learners Abstract 1. Introduction 2. Related Work 3. M ...
- 第七十六章 SQL命令 TOP
文章目录 第七十六章 SQL命令 TOP 大纲 参数 描述 TOP int值 TOP和缓存查询 TOP和ORDER BY TOP 优化 TOP与聚合和函数 示例 第七十六章 SQL命令 TOP 指定返 ...
- JavaScript学习(七十六)—this的指向问题
JavaScript学习(七十六)-this的指向问题 在文档中(全局环境中)直接使用this,代表的是window 在HTML事件处理程序中,如果将this作为实参传递给事件处理函数,this代表的 ...
- 今有兽,六首四足;禽,四首二足,上有七十六首,下有四十六足。问:禽、兽各几何?...
根据题目描述,兽有六首四足,禽有四首二足,上面有七十六首,下面有四十六足.根据题意,兽和禽的数量可以用首数和足数来确定. 首数为76,足数为46,先用首数来算: 76首/6首=12.67个,可知兽有1 ...
最新文章
- 英文版PDF不能显示中文PDF文件的解决方法
- XML的四种解析器(dom,sax,jdom,dom4j)原理及性能比较
- 还是畅通工程(克鲁斯卡尔算法+并查集)
- Redis的8大数据类型,写的真好
- [No0000197]Windows用户都应该知道的运行命令
- Javascript禁止网页复制粘贴效果,或者复制时自动添加来源信息
- 欧姆龙cp1h指令讲解_欧姆龙cp1h常用指令学习(六)功能块、子程序
- 每月物品消耗统计表_预算统计表- .doc
- Windows实现微信多开
- bat脚本学习——拖拽文件到bat下载
- 狂神Redis学习笔记(已更完)
- VML实例-拖动效果
- iOS Charts
- 类选择器和ID选择器
- Python绘图实例3:正八边形绘制
- 自己的智能AI聊天机器人,可自定义头像,免费html源码分享,粘贴即用!
- 编程题:核桃的数量(求最小公倍数的问题)
- 计算机课遇到游戏,信息技术课玩游戏的现象及想法
- C++ 关于日期时间(四)asctime/ctime/gmtime/time_t/tm
- spring源码学习之整合Mybatis原理分析