- State of immutable object can not be modified after construction, any modification should result in new immutable object.
- All fields of Immutable class should be final.
- Object must be properly constructed i.e. object reference must not leak during construction process.
- Object should be final in order to restrict sub-class for altering immutability of parent class.
要寫出Immutable類,需要遵循以下幾個原則:
1)immutable對象的狀態在創建之后就不能發生改變,任何對它的改變都應該產生一個新的對象。
2)Immutable類的所有的屬性都應該是final的。
3)對象必須被正確的創建,比如:對象引用在對象創建過程中不能泄露(leak)。
4)對象應該是final的,以此來限制子類繼承父類,以避免子類改變了父類的immutable特性。
5)如果類中包含mutable類對象,那么返回給客戶端的時候,返回該對象的一個拷貝,而不是該對象本身(該條可以歸為第一條中的一個特例)
使用Immutable類的好處:
1)Immutable對象是線程安全的,可以不用被synchronize就在并發環境中共享
2)Immutable對象簡化了程序開發,因為它無需使用額外的鎖機制就可以在線程間共享
3)Immutable對象提高了程序的性能,因為它減少了synchroinzed的使用
4)Immutable對象是可以被重復使用的,你可以將它們緩存起來重復使用,就像字符串字面量和整型數字一樣。你可以使用靜態工廠方法來提供類似于valueOf()這樣的方法,它可以從緩存中返回一個已經存在的Immutable對象,而不是重新創建一個。