看了好久,还是不明白。下面程序的第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>();
^
*/
------解决方案--------------------
list1与list4,list2与list3的区别 我只是知道下面这样:
List<A> list1 = new ArrayList<B>(); //这行不行
List<? extends A> list2 = new ArrayList<B>();
因为B是A的子类 正好符合List<? extends A>中? extends A的意思 所以就能引用。。。
仅供参考哈
------解决方案--------------------
------解决方案--------------------
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());