Immutable集合

    大家都知道JDK提供了Collections.UnmodifiableList(),Collections.UnmodifiableSet()和Collections.unmodifiableMap()這些包裝方法。事實上它們的實現都是包裝了原來的集合對象,然後在add,put,remove這樣的方法上面拋出UnsupportedOperationException。這樣就實現了Unmodifiable特性。這種做法在編程中叫作轉發(forwarding)。

    這樣的Unmodifiable集合能滿足一般的需求,但是如果碰到下面的情況 - 例如你需要定義2個常數放在List裏面然後把這個List做成final,而且用Collections.UnmodifiableList()包裝一下,就以爲高枕無憂了:

看上去unmodifiableList是不可改變的,但是如果這樣:

 

    你再看unmodifiableList已經被加了"NORMAL"。

    當然有經驗的程序員可以把原來的List放到新作的List然後Unmodifiable包裝一下:

但是已經有Google Collection的Immutable集合解決了這個問題。剛纔unmodifiableList可以這樣來做:

    除此之外Immutable集合還提供了ImmutableSet和ImmutableMap來包裝集合。

    爲了便捷開發Immutable集合還能讓開發者方便地在初始化設值:

    值得注意的是這些Immutable集合都是abstract類,它們的初始化都是由of(),copyOf()以及builder模式這樣方式來實現。這也體現了作者在編程時候對代碼靈活度的考慮。

 

    下載地址: google guava

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章