您好,登錄后才能下訂單哦!
這篇文章主要為大家展示了“java中ImmutableMap怎么用”,內(nèi)容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“java中ImmutableMap怎么用”這篇文章吧。
java中的Immutable對象:
簡單地說,如果一個對象實例不能被更改就是一個Immutable的對象,Java SDK提供的大量值對象,比如String等都是Immutable的對象。
創(chuàng)建ImmutableMap:
Map<String,Object> immutableMap = new ImmutableMap.Builder<String,Object>().build();
在創(chuàng)建時放值:
Map<String,Object> immutableMap = new ImmutableMap.Builder<String,Object>() .put("k1","v1") .put("k2","v2") .build();
創(chuàng)建后不可變:
immutableMap.put("k1","v3");//會拋出java.lang.UnsupportedOperationException
ImmutableMap的使用場景:
適合
1、確定性的配置, 比如根據(jù)不同的key值得到不同的請求url
2、寫單元測試
不適合
1、key, value為未知參數(shù), 可能有null產(chǎn)生的情況
ImmutableMap是不可變的,線程安全的;它可以創(chuàng)建一些常量的映射鍵值對;他提供了很多的組合鍵值對的方法,源碼中使用了一個靜態(tài)內(nèi)部類來組裝構(gòu)建ImmutableMap,靜態(tài)內(nèi)部類作為外部類的輔助構(gòu)建ImmutableMap,內(nèi)部使用final聲明了一個ArrayList變量。
public static class Builder<K, V>{ final ArrayList<Map.Entry<K, V>> entries = Lists.newArrayList(); public Builder() {} public Builder<K, V> put(K key, V value) { this.entries.add(ImmutableMap.entryOf(key, value)); return this; } public Builder<K, V> put(Map.Entry<? extends K, ? extends V> entry) { K key = entry.getKey(); V value = entry.getValue(); if ((entry instanceof ImmutableEntry)) { Preconditions.checkNotNull(key); Preconditions.checkNotNull(value); Map.Entry<K, V> immutableEntry = entry; this.entries.add(immutableEntry); } else { this.entries.add(ImmutableMap.entryOf(key, value)); } return this; } public Builder<K, V> putAll(Map<? extends K, ? extends V> map) { this.entries.ensureCapacity(this.entries.size() + map.size()); for (Map.Entry<? extends K, ? extends V> entry : map.entrySet()) { put(entry.getKey(), entry.getValue()); } return this; } public ImmutableMap<K, V> build() { return fromEntryList(this.entries); } private static <K, V> ImmutableMap<K, V> fromEntryList(List<Map.Entry<K, V>> entries) { int size = entries.size(); switch (size) { case 0: return ImmutableMap.of(); case 1: return new SingletonImmutableBiMap((Map.Entry)Iterables.getOnlyElement(entries)); } Map.Entry<?, ?>[] entryArray = (Map.Entry[])entries.toArray(new Map.Entry[entries.size()]); return new RegularImmutableMap(entryArray); } }
之前我們判斷取值結(jié)果可以使用if else形式:
int a = 1; if(a == 1) { System.out.println(a); } else { System.out.println(a); }
或者使用switch方式:
int a = 1; switch (a) { case 1: System.out.println(a); break; case 2: System.out.println(a); default: System.out.println(a); break; }
現(xiàn)在可以使用ImmutableMap集合來組裝鍵值對,這樣的組合方式既簡單又省去了大量多余的代碼:
ImmutableMap<String, Object> map = ImmutableMap .<String, Object>builder() .put("1", "1") .put("2", "2") .put("3", "3") .build();
ImmutableMap<String, String> map1 = ImmutableMap .<String, String>of("1", "2");
以上是“java中ImmutableMap怎么用”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業(yè)資訊頻道!
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。