ジェネリックに関するJavaに関する質問があります。私は、一般的なリストを宣言:リスト<? extends MyType>
List<? extends MyType> listOfMyType;
は、その後、いくつかの方法で、私はインスタンス化し、そのリストに項目を追加してみてください:
myTypeInstance
はタイプ
MyType
の単なる対象である
listOfMyType = new ArrayList<MyType>();
listOfMyType.add(myTypeInstance);
。それはコンパイルされません。それは言う:
メソッドAdd(キャプチャ#3-の がMyTypeを拡張?)タイプのリストに<キャプチャ#3-の を? extends MyType>は適用されません。 引数(MyType)
ご存じですか?
ジョシュ・ブロッホが言うように: "PECSを忘れないでください:プロデューサーは、消費者のスーパーを拡張します。" listOfMyTypeはコンシューマ(あなたが追加しているコンシューマ)なので、 'super'は有効で' extends'はそうではありません。 –
リンクが壊れています。 –
pedantryのポイント:あなたは 'null'と' extend'を 'put 'することができます。また、以前に取得した参照をタイプして「置く」こともできます。 –