zoukankan      html  css  js  c++  java
  • java generic super, extend

        //Apple Orange 都继承自Fruit类,同时Jonathan是Apple的子类
        List<? extends Fruit> list = new ArrayList<Apple>();
        //list.add(new Apple());Error
        //list.add(new Fruit());Error

        List<? super Fruit> list = new ArrayList<Apple>();
        list.add(new Apple());//可以
        list.add(new Fruit());//可以

        List<? extends Fruit> list = new ArrayList<Apple>();
        list中为什么不能加入Fruit类和Fruit类的子类呢,原因是这样的
           List<? extends Fruit>表示上限是Fruit,下面这样的赋值都是合法的
           List<? extends Fruit> list1 = new ArrayList<Fruit>();
           List<? extends Fruit> list2 = new ArrayList<Apple>();
           List<? extends Fruit> list3 = new ArrayList<Jonathan>();
           如果List<? extends Fruit>支持add方法的方法合法的话
           list1可以add Fruit和所有Fruit的子类
           list2可以add Apple和所有Apple的子类
           list3可以add Jonathan和所有Jonathan的子类
           这样的话,问题就出现了
           List<? extends Fruit>所应该持有的对象是Fruit的子类,而且具体是哪一个
           子类还是个未知数,所以加入任何Fruit的子类都会有问题,因为如果add Apple
           的话,可能List<? extends Fruit>持有的对象是new ArrayList<Jonathan>()
           Apple的加入肯定是不行的,如果 如果add Jonathan
           的话,可能List<? extends Fruit>持有的对象是new ArrayList<Jonathan的子类>()
           Jonathan的加入又不合法,所以List<? extends Fruit> list 不能进行add

           
           而List<? super Fruit> list 表示list持有的对象是Fruit的父类,下限是  Fruit,所以list中add Fruit或Fruit的子类是没有问题的

  • 相关阅读:
    Openssl和PKCS#11的故事
    SSL连接建立过程分析(5)
    SSL连接建立过程分析(1)
    关于OpenSSL支持USBKEY证书的尝试
    install the CLEARCASE with eclipse 3.4,duplicate location
    10种技巧可提升Android应用运行效果
    专访实战专家 揭秘iOS神奇开发之路
    win objc codeblocks
    redeclared as different kind of symbol ,undefined reference to `__objc_class_name_Rectangle12'
    201203NEWS
  • 原文地址:https://www.cnblogs.com/SZLLQ2000/p/5253806.html
Copyright © 2011-2022 走看看