J bloch 使用什么"failure atomicity",它在不可变对象方面有何好处?



刚刚发现以下语句是immutableobject的好处

不可变对象总是具有"失败原子性"(Joshua Bloch):如果一个不可变对象抛出异常,它就永远不会留在不希望的或不确定的状态。

有人能更详细地解释它吗?为什么会这样?

Bloch的"Failure atomicity"意味着,如果一个方法抛出异常,那么该对象在之后应该仍然可用。通常,对象应该处于与调用方法之前相同的状态。

在不可变对象的情况下,您可以简单地从它是不可变的这一事实中获得这一点。没有更改对象状态的操作。对象的所有方法都可以创建从原始对象派生的新对象。

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

可变对象也可以获得失败原子性,但您必须特别注意它,而在不可变对象中,它只是遵循您将其设计为不可变的注意事项。

最新更新