Joshua Bloch使用的“失败原子性”是什么?它对不可变对象有何好处?
【摘要】 Bloch的“失败原子性”意味着,如果方法抛出异常,则该对象之后仍应可用。通常,对象应与调用该方法之前处于相同状态。
对于不可变对象,可以简单地从它是不可变的事实中获得收益。没有可以更改对象状态的操作。对象的所有方法都可以创建从原始对象派生的新对象。
例如,String具有substring(int)方法。它不会更改原始字符串中的任何内容-它会创建一个新对象,其内容...
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
文章来源: javaedge.blog.csdn.net,作者:JavaEdge.,版权归原作者所有,如需转载,请联系作者。
原文链接:javaedge.blog.csdn.net/article/details/109215155
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)