范型<? extends A> 到底表示什么意思?
看了好久,还是不明白。下面程序的第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的意思 所以就能引用。。。
仅供参考哈
[解决办法]