zoukankan      html  css  js  c++  java
  • java泛型<? extends E> 有上限通配符与<? Super E>有上限通配符

    通配符?,?表示占位,表明将来使用的时候在指明类型

    •  <?>无限定的通配符, 是让泛型能够接受未知类型的数据
    • <? extends E> 有上限通配符,能够接受指定类及其子类类型的数据,E就是该泛型的上边界 
        • 注意:这里不仅继承了父类E的子类,也可以代指显现了接口E的类
    • <? super E>:有下限的通配符。能够指定其父类类型的数据,E就是该泛型类型的下边界。
      •   注意:你可以为一个泛型指定上边界或者下边界,但是不能同时指定上下边界

    与<T>类型比较

    • 比起<T>类型,<?>通配符不需要定义类型,传入的默认为Object,所以在方法返回值使用<?>需要将Object向下转型为需要的类型
    • 可以直接在类中定义静态方法,因为其<?>的类型默认为Object,是确定的类型,不需要像<T>要在方法返回值之前进行定义
    • public static void main(String[] args) {
              List<Person1> personList = new ArrayList<>();
              personList.add(new Person1("11", "11"));
              personList.add(new Person1("22", "22"));
              personList.add(new Person1("33", "33"));
              print(personList);
      
              System.out.println("======================");
      
              List<Man> manList = new ArrayList<>();
              manList.add(new Man("11", "11"));
              manList.add(new Man("22", "22"));
              manList.add(new Man("33", "33"));
              print(manList);
          }
      
          /**
           *  List<? extends Person1> :有上限的通配符,表示传入的对象只能是Person1 或其的子类, <E>元素类型代表这个泛型通配符的上限
           * @param list
           */
          static void print(List<? extends Person1> list) {
              for (Object o : list) {
                  System.out.println(o);
              }
          }

     <? Super E>有上限通配符

    • 只能传递有E 及其父类到上限通配符中
  • 相关阅读:
    python主成分分析
    matplotlib绘图pie
    cpu监控:mpstat命令
    cpu监控:dstat
    MongoDB--安装部署
    Linux-网络管理
    Apache 虚拟主机配置
    Apache 访问控制
    Apache 域名跳转配置
    Apache 日志管理
  • 原文地址:https://www.cnblogs.com/huanghuanghui/p/10153091.html
Copyright © 2011-2022 走看看