我正在使用 Java 8。在通过 Java OCP 8 的培训期间,我发现了一些我不理解并想知道的代码片段,为什么它对我来说如此奇怪。
我有下一个层次结构:
class A {}
class B extends A {}
class C extends B {}
第一个,此代码有效:
List<?> list1 = new ArrayList<A>() {
{
add(new A());
}
};
但是下一个代码不起作用,编译错误:
list1.add(new A());
那么,为什么我们不能以这种方式添加新记录呢?
第二个,此代码有效:
List<? extends A> list2 = new ArrayList<A>() {
{
add(new A());
add(new B());
add(new C());
}
};
但是下一个代码不起作用,编译错误:
list2.add(new A());
list2.add(new B());
list2.add(new C());
最后一个,这段代码是有效的:
List<? super B> list3 = new ArrayList<A>() {
{
add(new A());
add(new B());
add(new C());
}
};
但是在接下来的代码中,当我们添加new A()时,编译错误:
list3.add(new A()); // compilation error
list3.add(new B());
list3.add(new C());
感谢您的回答!