Spring中的aware接口详情
319
2022-10-20
java ImmutableMap的使用说明
ImmutableMap:一个不可变集合
java中的Immutable对象:
简单地说,如果一个对象实例不能被更改就是一个Immutable的对象,Java SDK提供的大量值对象,比如String等都是Immutable的对象。
创建ImmutableMap:
Map
在创建时放值:
Map
.put("k1","v1")
.put("k2","v2")
.build();
创建后不可变:
immutableMap.put("k1","v3");//会抛出java.lang.UnsupportedOperationException
ImmutableMap中key和value均不能为null,放入null值会抛出NPE
ImmutableMap的使用场景:
适合
1、确定性的配置, 比如http://根据不同的key值得到不同的请求url
2、写单元测试
不适合
1、key, value为未知参数, 可能有null产生的情况
guava中ImmutableMap使用示例及好处
ImmutableMap是不可变的,线程安全的;它可以创建一些常量的映射键值对;他提供了很多的组合键值对的方法,源码中使用了一个静态内部类来组装构建ImmutableMap,静态内部类作为外部类的辅助构建ImmutableMap,内部使用final声明了一个ArrayList变量。
public static class Builder
final ArrayList
public Builder() {}
public Builder
{
http:// this.entries.add(ImmutableMap.entryOf(key, value));
return this;
}
public Builder
{
K key = entry.getKey();
V value = entry.getValue();
if ((entry instanceof ImmutableEntry)) {
Preconditions.checkNotNull(key);
Preconditions.checkNotNull(value);
Map.Entry
this.entries.add(immutableEntry);
}
else
{
this.entries.add(ImmutableMap.enhttp://tryOf(key, value));
}
return this;
}
public Builder
{
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
{
return fromEntryList(this.entries);
}
private static
{
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) {
qIVFgqPcjh case 1:
System.out.println(a);
break;
case 2:
System.out.println(a);
default:
System.out.println(a);
break;
}
现在可以使用ImmutableMap集合来组装键值对,这样的组合方式既简单又省去了大量多余的代码:
ImmutableMap
.put("1", "1")
.put("2", "2")
.put("3", "3")
.build();
ImmutableMap
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~