天天看點

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

繼續閱讀