java – J bloch使用的“失败原子性”是什么以及它对于不可变对象有何益处?
作者:互联网
刚刚看到下面的声明作为不可变对象的好处
Immutable object always have “failure atomicity” (a term used by
Joshua Bloch) :
if an immutable object throws an exception, it’s never left in
an undesirable or indeterminate state.
任何人都可以更详细地解释它,为什么会这样呢?
解决方法:
Bloch的“失败原子性”意味着如果一个方法抛出一个异常,那么该对象之后仍然可以使用.通常,对象应处于调用方法之前的状态.
在一个不可变对象的情况下,你只是从它不可变的事实中获得.没有任何操作可以更改对象的状态.对象的所有方法都可以创建从原始对象派生的新对象.
例如,String有一个substring(int)方法.它不会更改原始字符串中的任何内容 – 它会创建一个新对象,其内容是您想要的原始字符串部分的副本.如果它抛出一个异常,那么你根本就不会得到新对象 – 但原始的String从未改变过. substring()中没有修改原始String的代码,因此它是失败原子的.
对于可变对象也可以获得失败原子性,但是你必须特别注意它,而在不可变对象中,它只是从你所采取的设计它是不可变的.
标签:java,atomicity,object,immutability 来源: https://codeday.me/bug/20191004/1851832.html