私はJava 8を使用しています。Java OCP 8を習得するためのトレーニング中に、わかりにくく、知りたいコードの断片が見つかりました。なぜboundsがJavaで奇妙に動作するのですか?
私は次の階層があります。
List<?> list1 = new ArrayList<A>() {
{
add(new A());
}
};
しかし、次のコードは動作しません、コンパイルエラー:
list1.add(new A());
class A {}
class B extends A {}
class C extends B {}
最初 1を、このコードは仕事です
なぜ、この方法で新しいレコードを追加できないのですか?
List<? extends A> list2 = new ArrayList<A>() {
{
add(new A());
add(new B());
add(new C());
}
};
しかし、次のコードは動作しません、コンパイルエラー:
秒 1、このコードは仕事で
list2.add(new A());
list2.add(new B());
list2.add(new C());
そして最後 1、このコードがあります仕事:
List<? super B> list3 = new ArrayList<A>() {
{
add(new A());
add(new B());
add(new C());
}
};
しかし、次のコードでは、我々は新しいAを追加する()、コンパイルエラー:あなたの答えのための
list3.add(new A()); // compilation error
list3.add(new B());
list3.add(new C());
ありがとう!
[PECS(プロデューサーはコンシューマースーパーを拡張するもの)とは何ですか?](http://stackoverflow.com/questions/2723397/what-is-pecs-producer-extends-consumer-super) – user140547
重複しない境界を使った具体的な流れです。 – badCoder
@ 911DidBush、答えのおかげで、コードはmainメソッドで書かれていました。 – badCoder