这篇文章主要为大家展示了“java中ImmutableMap怎么用”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“java中ImmutableMap怎么用”这篇文章吧。
java中的Immutable对象:
简单地说,如果一个对象实例不能被更改就是一个Immutable的对象,Java SDK提供的大量值对象,比如String等都是Immutable的对象。
创建ImmutableMap:
Map<String,Object> immutableMap = new ImmutableMap.Builder<String,Object>().build();
在创建时放值:
Map<String,Object> immutableMap = new ImmutableMap.Builder<String,Object>() .put("k1","v1") .put("k2","v2") .build();
创建后不可变:
immutableMap.put("k1","v3");//会抛出java.lang.UnsupportedOperationException
ImmutableMap的使用场景:
适合
1、确定性的配置, 比如根据不同的key值得到不同的请求url
2、写单元测试
不适合
1、key, value为未知参数, 可能有null产生的情况
ImmutableMap是不可变的,线程安全的;它可以创建一些常量的映射键值对;他提供了很多的组合键值对的方法,源码中使用了一个静态内部类来组装构建ImmutableMap,静态内部类作为外部类的辅助构建ImmutableMap,内部使用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); } }
之前我们判断取值结果可以使用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; }
现在可以使用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怎么用”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注亿速云行业资讯频道!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。