码迷,mamicode.com
首页 > 编程语言 > 详细

java泛型<? extends E> 有上限通配符与<? Super E>有上限通配符

时间:2018-12-20 23:57:51      阅读:387      评论:0      收藏:0      [点我收藏+]

标签:注意   pre   静态方法   子类   end   比较   main   表示   out   

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

  •  <?>无限定的通配符, 是让泛型能够接受未知类型的数据
  • <? 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 及其父类到上限通配符中

java泛型<? extends E> 有上限通配符与<? Super E>有上限通配符

标签:注意   pre   静态方法   子类   end   比较   main   表示   out   

原文地址:https://www.cnblogs.com/huanghuanghui/p/10153091.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!