解决方案 »

  1.   

    <? super B> 表示其方法参数可以接受 B 或 B 的子类型
      

  2.   


    依据替换原则(substitution principle),父类引用变量可指向子类对象。
    B是A的子类,所以ArrayList<A>是ArrayList<? super B>的子类,并且"ArrayList<? super B> list=new ArrayList<A>();"编译通过。
    对于方法add(? super B),请问什么才是类型"? super B"的子类。
    小弟是泛型初学者,还请多多指教。谢谢!
      

  3.   


    ArrayList<A>和ArrayList<? super B>之间没有继承关系,ArrayList<? super B> list=new ArrayList<A>(); 编译通过是因为泛型的语法就是这样支持的,<? super B> 表示“B的某种父类型”,
    在无法确定“某种”究竟是“哪种”的情况下,
    可以确定是<? super B>的“子类型”的只有 B 和 B的子类型(“子类型”加引号,准确的说法是“符合条件的类型”)
      

  4.   

    多说一句,<? super B> 表示“B的某种父类型”,
    同理,在无法确定“某种”究竟是“哪种”的情况下,
    可以确定是<? super B>的“父类型”的只有Object,所以当你调用 list2 的 get(int) 方法的时候,返回值只能用 Object 来接
      

  5.   


    非常感谢raistlic的详细解答。