起因:
今天在敲代碼的時候有一個想法,初始化一個Map對象,存儲小程序推送模板消息。本來是考慮使用enum枚舉類,之后因為初始話map對象卡住了。去搜索了一下,發(fā)現(xiàn)ImmutableMap類的神奇之處,記錄并學習一下。
1.什么是ImmutableMap對象
根據(jù)guava文檔所描述的,ImmutableMap是一個不可變的Map對象,其構(gòu)造器如下所示,用于創(chuàng)建不可變Map實例。
|static class |ImmutableMap.Builder<K,V>|

Guava提供了每個java.util的不可變版本。使用 ImmutableMap 映射 。每當我們嘗試修改它時,它都會拋出 UnsupportedOperationException。
2.可以鏈式編程的Map
最開始對他感興趣是因為他可以鏈式編程,顯得很酷,根據(jù)代碼提示寫起來也很塊,所以,進一步了解他。
Map<String, String> stringStringMap = ImmutableMap.<String,String>builder()
.put("page","page/page/index")
.put("templateId","")
.put("templateId","")
.put("formId","")
.build();
3.不可變的Map
為什么需要不可變的集合呢?
(1)保證線程安全:在并發(fā)程序中,使用Immutable既保證線程安全性,也大大增強了并發(fā)時的效率(跟并發(fā)鎖方式相比)。尤其當一個對象是值對象時,更應(yīng)該考慮采用Immutable方式;
(2)被不可信的類庫使用時會很安全;
(3)如果一個對象不需要支持修改操作(mutation),將會節(jié)省空間和時間的開銷;經(jīng)過分析,所有不可變的集合實現(xiàn)都比可變集合更加有效地利用內(nèi)存;
(4)可以當作一個常量來對待,并且這個對象在以后也不會被改變。
將一個對象復制一份成immutable的,是一個防御性編程技術(shù)。
為什么不可變?

源碼中,在build()方法里,進行了判斷,因為在builder()的時候size被初始化為4,所以這里直接就返回了一個不可變的集合。

而put方法,直接拋出異常,不可添加,其他方法相同。
不要以為每天把功能完成了就行了,這種思想是要不得的,互勉~!