美文网首页
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