Articles14
Tags12
Categories3
泛型上下界

泛型上下界

java是基于类型擦除的伪泛型 没其他语言的泛型好用

super 类型下界通配符

  • List中只能存储一种元素,此处声明的<!--? super BaseDemoEntity-->,表明这个List中存放的元素属于 BaseDemoEntity 其中一种 父类类型

  • BaseDemoEntity的父类可能有复数个,比如 Object,BaseEntity。取出时不知道到底List里到底装的啥,但一定是继承于Object,所以统一强转为Object类型

  • 存入时只能放入 BaseDemoEntity 和它的子类,因为声明的<!--? super BaseDemoEntity-->,BaseDemoEntity 可以被安全的强转为<!--? super BaseDemoEntity-->此处如果传入BaseDemoEntity的父类,那么运行时jvm将传入的类型转为<!--? super BaseDemoEntity-->时可能会因为类型不一致报错

    @RequestMapping("/superBaseDemoEntity")
    public void superBaseDemoEntity() &#123;

        List<!--? super BaseDemoEntity--> appList = new ArrayList&lt;&gt;();
        appList.add(new Music());
        appList.add(new BaseDemoEntity());
        Object object1 = appList.get(0);

    &#125;

extends 类型上界通配符

  • <!--? extends BaseDemoEntity--> => BaseDemoEntity的任意一种子类

  • List中只能存储一种元素,此处声明的<!--? extends BaseDemoEntity-->表明这个List中存放的元素可能是继承与 BaseDemoEntity 的 其中一种 元素

  • 取出时可以被安全的强转为 BaseDemoEntity

  • 存入时由于不知道你存入的类型是否跟<!--? extends BaseDemoEntity-->类型是一个类型,因此不能存入

     @RequestMapping("/extendsBaseDemoEntity")
    public void extendsBaseDemoEntity() &#123;

        List<!--? extends BaseDemoEntity--> appList2 = new ArrayList&lt;&gt;();
        BaseDemoEntity baseDemoEntity = appList2.get(0);
    &#125;
Author:Daizc
Link:http://yoursite.com/2019/04/26/%E6%B3%9B%E5%9E%8B%E4%B8%8A%E4%B8%8B%E7%95%8C/
版权声明:本文采用 CC BY-NC-SA 3.0 CN 协议进行许可