一、简介
Guava - ClassToInstanceMap
是Guava中新出的集合类型。官网对其描述如下:
Sometimes, your map keys aren't all of the same type: they are types, and you want to map them to values of that type. Guava provides
ClassToInstanceMap
for this purpose.
大致意思为:
有时,我们的映射键并不是所有类型都相同:它们是类型,如键分别是Integer
、Bigdecimal
等,但是他们都是属于Number
类型.我们如果希望将它们映射到该类型的值,就可以使用Guava
为此提供的新集合类型 - ClassToInstanceMap
。
值得注意的是:
1、ClassToInstanceMap
除了扩展Map接口之外,ClassToInstanceMap
还提供了T getInstance(类)
和T putInstance(类, T)
方法,这消除了强制类型安全强制转换的需要。
2、ClassToInstanceMap
只有一个类型参数.表示了所有的key不能超出这个类型参数的范围.
3、从技术上讲,ClassToInstanceMap
实现了Map<Class<? extends B>, B>
或者换句话说,从map
的子类B B .这可以使泛型类型实例参与ClassToInstanceMap
有点混乱,但是只要记住B总是上限的类型映射——通常,B是对象
二、实现
Guava
为ClassToInstanceMap
提供了命名为MutableClassToInstanceMap
和ImmutableClassToInstanceMap
的实现。
实验代码:
1、MutableClassToInstanceMap
实现
System.out.println("=================测试ClassToInstanceMap开始==================");
ClassToInstanceMap<Number> testMutableClassToInstanceMap = MutableClassToInstanceMap.create();
三、常用方法
1、getInstance()
方法
实验代码:
System.out.println("=================测试ClassToInstanceMap开始==================");
ClassToInstanceMap<Number> testMutableClassToInstanceMap = MutableClassToInstanceMap.create();
testMutableClassToInstanceMap.putInstance(Integer.class, NumberUtils.INTEGER_ZERO);
testMutableClassToInstanceMap.putInstance(Integer.class, NumberUtils.INTEGER_ONE);
testMutableClassToInstanceMap.putInstance(BigDecimal.class, BigDecimal.TEN);
System.out.println("=========测试创建方法========" + testMutableClassToInstanceMap);
实验结果:
=================测试ClassToInstanceMap开始==================
=========测试创建方法========{class java.lang.Integer=1, class java.math.BigDecimal=10}
2、putInstance()
方法
重要提示
ClassToInstanceMap
与任何其他Map
一样,可能包含原始类型的条目,而原始类型及其对应的包装器类型可能映射到不同的值。
实验代码:
System.out.println("=========测试getInstance()方法========" + testMutableClassToInstanceMap.getInstance(Integer.class));
System.out.println("=========测试getInstance()方法========" + testMutableClassToInstanceMap.getInstance(BigDecimal.class));
实验结果:
=========测试getInstance()方法========1
=========测试getInstance()方法========10
......未完待续
网友评论