看了好久,还是不明白。下面程序的第19行的错误是为什么?
还有,list1与list4,list2与list3有没有区别?
这种表示在实际中应用得多不多,高手们告一声,就用不多的话我就放弃这部分了,搞了两天了。import java.util.*;class A {}
class B extends A {}class C {}public class Test {
public static void main(String[] args) {
List<A> list1 = new ArrayList<A>();
list1 = Arrays.asList(new A(), new B(), new B(), new A());
// list1 = Arrays.asList(new A(), new B(), new B(), new A(), new C()); //错误
List<A> list2;
List<? extends A> list3;
list2 = Arrays.asList(new A(), new B(), new B(), new A());
list3 = Arrays.asList(new A(), new B(), new B(), new A());
// list2 = Arrays.asList(new A(), new B(), new B(), new A(), new C()); //错误
List<? extends A> list4 = new ArrayList<A>();
List<? extends A> list5 = new ArrayList<? extends A>(); //第19行 错误
}
}
/*
Test.java:19: 意外的类型
找到: ? extends A
需要: 不带限制范围的类或接口
                List<? extends A> list5 = new ArrayList<? extends A>();
                                                       ^  
*/

解决方案 »

  1.   

    哎呀 我也在看泛型 也是看得很糊涂第十九行出错时因为等号右边那部分不能有不确定的类型参数,? extends A就不确定,他代表A的任何子类。
      

  2.   

    list1与list4,list2与list3的区别 我只是知道下面这样:List<A> list1 = new ArrayList<B>();  //这行不行
    List<? extends A> list2 = new ArrayList<B>();因为B是A的子类  正好符合List<? extends A>中? extends A的意思 所以就能引用仅供参考哈 
      

  3.   

    先观察下extends和super的区别
    class A{}
    class B extends A{}
    class C extends B{}
    List<? extends B> a = new ArrayList<C>();
    List<? super B> b = new ArrayList<A>();extends必须是本身或子类
    super必须是本身或父类
      

  4.   

    extends是以后面的类为上界
    super是以后面的类为下界
      

  5.   

    List<? extends A> list2 = new ArrayList<B>(); 是对的。
    List<? extends A> = new ArrayList<? extends A>()有问题, 为何尖特号内的不能保持一致?
    下面的可以成功:
    List<? extends A> list4 = new ArrayList<B>();
    list4 = Arrays.asList(new A(), new B(), new B(), new A());
    照理说new A()不应该能加进去,因为这是一个ArrayList<B>。
      

  6.   

    ? extends A 是 java.lang.reflect.WildcardType
    ?号表示一个未知的类型。你可以认为是任意的类。
    ? extends A 意思就是  任意继承自A的类
      

  7.   


    new A()可以加进去 asList泛型方法进行参数类型推断后,返回的类型是List<A>,这个引用是符合List<? extends A>的
      

  8.   

    List<? extends A> = new ArrayList<? extends A>();这是实体化一个对像但你又给了一个模糊的类型那就没办法实体化,? extends A 指的是所有A的子类而该文字本身不代表一个类
    关键是红字估计你换个和A没关系的就不行
    List<? extends A> list4 = new ArrayList<B>();
    list4 = Arrays.asList(new A(), new B(), new B(), new A());