美文网首页
Guava记录 - 新集合类型ClassToInstanceM

Guava记录 - 新集合类型ClassToInstanceM

作者: 一点温柔 | 来源:发表于2019-10-24 21:35 被阅读0次

一、简介

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.

大致意思为:

有时,我们的映射键并不是所有类型都相同:它们是类型,如键分别是IntegerBigdecimal等,但是他们都是属于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是对象

二、实现

GuavaClassToInstanceMap提供了命名为MutableClassToInstanceMapImmutableClassToInstanceMap的实现。

实验代码:

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

......未完待续

相关文章

网友评论

      本文标题:Guava记录 - 新集合类型ClassToInstanceM

      本文链接:https://www.haomeiwen.com/subject/qktjvctx.html