私は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());
では、なぜこの方法で新しいレコードを追加できないのでしょうか?
2つ目、このコードは機能します。
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());
回答ありがとうございます。