Bloch的“失败原子性”意味着,如果方法抛出异常,则该对象之后仍应可用。通常,对象应与调用该方法之前处于相同状态。

对于不可变对象,可以简单地从它是不可变的事实中获得收益。没有可以更改对象状态的操作。对象的所有方法都可以创建从原始对象派生的新对象。

例如,String具有substring(int)方法。它不会更改原始字符串中的任何内容-它会创建一个新对象,其内容是所需原始字符串部分的副本。如果抛出异常,那么您将不会获得新对象-但原始String从未更改。 substring()中没有修改原始String的代码,因此它是故障原子的。

可变对象也可以获取失败原子性,但是必须特别注意它,而在不可变对象中,它仅源于您将其设计为不可变的注意。

参考

  • https://stackoverflow.com/questions/29842845/what-is-failure-atomicity-used-by-j-bloch-and-how-its-beneficial-in-terms-of-i

Joshua Bloch使用的“失败原子性”是什么?它对不可变对象有何好处?相关推荐

  1. 采访Java Collection的作者Joshua Bloch

    想必用Java的人都用过JDK的容器类吧,什么List, Set, Map啦.每天这些代码在全世界成千上万的JVM里面运行,每天数以万记的程序员在使用这些类.你知道这些这么cool的代码是谁写的吗?是 ...

  2. 约书亚·布洛赫(Joshua Bloch):Bumper-Sticker API设计

    我的会议如何设计一个好的API及其重要性一直吸引着很多人. 去年,InfoQ上的观看次数排名第三. 当我在OOPSLA 2006上以受邀演讲的形式介绍本次会议时,有机会为会议记录撰写摘要. 我决定代替 ...

  3. Joshua Bloch访谈:API对设计流程的影响

    文 / Peter Seibel 译 / 郝培强 本文是Common Lisp专家Peter Seibel对Google公司首席Java架构师Joshua Bloch的访谈,谈到API对设计流程的影响 ...

  4. Google首席软件工程师Joshua Bloch谈如何设计一款优秀的API【附PPT】

    要:API设计看似简单,其实里面的学问还不少,在整个设计流程中,一不小心就会陷入各种陷阱之中,给你带来后患无穷的危害.Joshua Bloch是Google的首席Java架构师,他在一篇PPT里向大家 ...

  5. Joshua Bloch

    早在1996年,适逢Java刚刚崭露头角,年内好事连连.先是1月份发布JDK 1.0,然后是5月底在旧金山召开首届JavaOne大会,年末又是JDK 1.1紧跟其后.正是在Java技术如火如荼.大展拳 ...

  6. Google首席工程师Joshua Bloch谈如何设计优秀的API

    Google首席工程师Joshua Bloch谈如何设计优秀的API How to Design a Good API and Why it Matters 中文版:http://www.codece ...

  7. java容器类 joshua bloch_java-Builder(Joshua Bloch风格)用于抽象类的具体实现?

    假设我有一个抽象类(BaseThing).它具有一个必需参数("基本必需")和一个可选参数("基本可选").我有一个扩展它的具体类(事物).它还具有一个必需参数 ...

  8. Google首席软件工程师Joshua Bloch谈如何设计一款优秀的API

    [编者按]随着近来软件规模的日益庞大,API编程接口的设计变的越来越重要.良好的接口设计可以降低系统各部分之间的相互依赖,提高组成单元的内聚性,降低组成单元间的耦合度,从而提高系统的维护性和稳定性. ...

  9. Google首席软件工程师Joshua Bloch谈如何设计一款优秀的API【转载】

    Google首席软件工程师Joshua Bloch谈如何设计一款优秀的API 摘要:API设计看似简单,其实里面的学问还不少,在整个设计流程中,一不小心就会陷入各种陷阱之中,给你带来后患无穷的危害.J ...

最新文章

  1. qu.la网站上的小说爬取
  2. python需要下载哪些插件-python需要装哪些工具包
  3. Qt MVC编程之table view 的简单应用
  4. 一文掌握RNA seq,RNA seq课程大汇总
  5. 【pycharm使用指南】pycharm 取消连按两下shift出现的全局搜索 | pycharm误触出搜索弹窗
  6. 前15天mysql_Mysql查询今天/昨天/15天前/上个月/去年/上周每日等函数
  7. DataFrame纵向合并
  8. 安装 openSUSE Leap 42.1 之后要做的 8 件事
  9. 字符串匹配算法(BM)
  10. mysql教程丿it教程网_1.0MySQL基础入门【DQL部分】
  11. web开发中的跨域问题
  12. 【c++】笔记:输入带空格的字符串
  13. Python 批量重命名文件
  14. Android P之监听Process Activity TaskStack状态变化
  15. 服务式GIS实践与发展——REST 服务
  16. 如何让电脑快速蓝屏(只是个玩笑)
  17. TBODY标签的作用介绍
  18. DirectX11_HLSL入门篇
  19. 下面列出了 网上招聘,人才招聘,招聘信息,网上求职,招聘机遇,招聘网,人才网,工作网
  20. python-OpenCv调用IP摄像头APP

热门文章

  1. (全网独家干货)工控类网站,论坛,微信公众号的整理分享
  2. 加速度,速度,位移和时间的关系
  3. python django怎么读_怎么读django
  4. MPCS-314 3A 光电耦合器 用于IGBT/MOSFET隔离栅极驱动 完美代替TLP5701
  5. 【基于matlab数字图像处理GUI代码】_数字图像处理考核论文_大作业_项目
  6. 微信IFTTT,用微信同步照片或信息到facebook和twitter
  7. 计算机控制系统接地方式,计算机控制系统接地技术探讨
  8. python学习笔记一——鸭子模型
  9. 1079: 统计方形
  10. Linux setup jdk environment