Joshua Bloch使用的“失败原子性”是什么?它对不可变对象有何好处?
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使用的“失败原子性”是什么?它对不可变对象有何好处?相关推荐
- 采访Java Collection的作者Joshua Bloch
想必用Java的人都用过JDK的容器类吧,什么List, Set, Map啦.每天这些代码在全世界成千上万的JVM里面运行,每天数以万记的程序员在使用这些类.你知道这些这么cool的代码是谁写的吗?是 ...
- 约书亚·布洛赫(Joshua Bloch):Bumper-Sticker API设计
我的会议如何设计一个好的API及其重要性一直吸引着很多人. 去年,InfoQ上的观看次数排名第三. 当我在OOPSLA 2006上以受邀演讲的形式介绍本次会议时,有机会为会议记录撰写摘要. 我决定代替 ...
- Joshua Bloch访谈:API对设计流程的影响
文 / Peter Seibel 译 / 郝培强 本文是Common Lisp专家Peter Seibel对Google公司首席Java架构师Joshua Bloch的访谈,谈到API对设计流程的影响 ...
- Google首席软件工程师Joshua Bloch谈如何设计一款优秀的API【附PPT】
要:API设计看似简单,其实里面的学问还不少,在整个设计流程中,一不小心就会陷入各种陷阱之中,给你带来后患无穷的危害.Joshua Bloch是Google的首席Java架构师,他在一篇PPT里向大家 ...
- Joshua Bloch
早在1996年,适逢Java刚刚崭露头角,年内好事连连.先是1月份发布JDK 1.0,然后是5月底在旧金山召开首届JavaOne大会,年末又是JDK 1.1紧跟其后.正是在Java技术如火如荼.大展拳 ...
- Google首席工程师Joshua Bloch谈如何设计优秀的API
Google首席工程师Joshua Bloch谈如何设计优秀的API How to Design a Good API and Why it Matters 中文版:http://www.codece ...
- java容器类 joshua bloch_java-Builder(Joshua Bloch风格)用于抽象类的具体实现?
假设我有一个抽象类(BaseThing).它具有一个必需参数("基本必需")和一个可选参数("基本可选").我有一个扩展它的具体类(事物).它还具有一个必需参数 ...
- Google首席软件工程师Joshua Bloch谈如何设计一款优秀的API
[编者按]随着近来软件规模的日益庞大,API编程接口的设计变的越来越重要.良好的接口设计可以降低系统各部分之间的相互依赖,提高组成单元的内聚性,降低组成单元间的耦合度,从而提高系统的维护性和稳定性. ...
- Google首席软件工程师Joshua Bloch谈如何设计一款优秀的API【转载】
Google首席软件工程师Joshua Bloch谈如何设计一款优秀的API 摘要:API设计看似简单,其实里面的学问还不少,在整个设计流程中,一不小心就会陷入各种陷阱之中,给你带来后患无穷的危害.J ...
最新文章
- qu.la网站上的小说爬取
- python需要下载哪些插件-python需要装哪些工具包
- Qt MVC编程之table view 的简单应用
- 一文掌握RNA seq,RNA seq课程大汇总
- 【pycharm使用指南】pycharm 取消连按两下shift出现的全局搜索 | pycharm误触出搜索弹窗
- 前15天mysql_Mysql查询今天/昨天/15天前/上个月/去年/上周每日等函数
- DataFrame纵向合并
- 安装 openSUSE Leap 42.1 之后要做的 8 件事
- 字符串匹配算法(BM)
- mysql教程丿it教程网_1.0MySQL基础入门【DQL部分】
- web开发中的跨域问题
- 【c++】笔记:输入带空格的字符串
- Python 批量重命名文件
- Android P之监听Process Activity TaskStack状态变化
- 服务式GIS实践与发展——REST 服务
- 如何让电脑快速蓝屏(只是个玩笑)
- TBODY标签的作用介绍
- DirectX11_HLSL入门篇
- 下面列出了 网上招聘,人才招聘,招聘信息,网上求职,招聘机遇,招聘网,人才网,工作网
- python-OpenCv调用IP摄像头APP
热门文章
- (全网独家干货)工控类网站,论坛,微信公众号的整理分享
- 加速度,速度,位移和时间的关系
- python django怎么读_怎么读django
- MPCS-314 3A 光电耦合器 用于IGBT/MOSFET隔离栅极驱动 完美代替TLP5701
- 【基于matlab数字图像处理GUI代码】_数字图像处理考核论文_大作业_项目
- 微信IFTTT,用微信同步照片或信息到facebook和twitter
- 计算机控制系统接地方式,计算机控制系统接地技术探讨
- python学习笔记一——鸭子模型
- 1079: 统计方形
- Linux setup jdk environment