Effective Java 学习笔记(第64条:努力使失败保持元子性)
2014-04-03 16:45
267 查看
一般而言,失败的方法调用应该使对象保持在被调用之前的状态。具有这种属性的方法被成为具有失败原子性(failure atomic)。最简单的办法莫过于设计一个不可变的对象(见第15条)。对于在可变对象上执行操作的方法,获得失败原子性最常见的方法是,在执行操作之前检查参数的有效性(见第38条)。一种类似的获得失败原子性的办法是,调整计算处理过程的顺序,使得任何可能会失败的计算部分都在对象状态被修改之前发生。第三种获得失败原子性的办法远远没有那么常用,用法是编写一段恢复代码(recovery code),由它来拦截操作过程中发生的失败,以及使对象会滚到操作开始之前的状态上。这种办法主要用于永久性的(基于磁盘的(disk-based)数据结构)。最后一种获得失败原子性的办法是,在对象的一份临时拷贝上执行操作,当操作完成之后再用临时拷贝中的结果代替对象的内容。错误(相对于异常)通常是不可恢复的,当方法抛出错误时,它们不需要努力保持失败原子性。一般而言,作为方法规范的一部分,产生的任何异常都应该让对象保持在该方法调用之前的状态。如果违反这条规则,API文档就应该清楚地指明对象将会处于什么样的状态。
相关文章推荐
- 2015070505 - EffactiveJava笔记 - 第64条 努力保持失败原子性
- Effective Java 学习笔记(二)
- Effective Java 学习笔记(第61条:抛出与抽象相对应的异常)
- Effective Java 学习笔记(8)
- Effective Java 学习笔记(9)
- Effective Java 学习笔记(24)
- Effective Java 学习笔记(三)
- Effective Java 学习笔记(1)
- Effective Java 学习笔记 1
- Java:Effective Java 学习笔记(第48条:如果需要精确的答案,请避免使用float和double)
- Effective Java 学习笔记 (10)
- Effective Java 学习笔记(23)
- Effective Java 学习笔记 1
- Effective Java 学习笔记 (五)
- Effective Java学习笔记 4 通过私有构造器增强不可实例化的能力
- Effective Java 学习笔记之第七条——避免使用终结(finalizer)方法
- effective java 学习笔记——全书纲要
- Effective Java 学习笔记 (11)
- effective-java 学习笔记(1)
- Effective Java 学习笔记(第51条:当心字符串的连接性能)