私はSCJP/OCPJPの勉強をしていますが、奇妙な継ぎ目があるサンプルの質問に出くわしました。
サンプルコードは、2つのジェネリックコレクションをインスタンス化しました。
List<?> list = new ArrayList<?>();
List<? extends Object> list2 = new ArrayList<? extends Object>();
質問に対する「正しい」答えは、このコードはコンパイルされますが、いずれかのコレクションに追加するとランタイムエラーが発生するというものでした。
このようなコードをコンパイルしようとすると、エラーが発生します。Javaチュートリアルでは、このタイプのコードすら示されていません。代わりに、通常、アップキャストの一部としてワイルドカードを使用します。
Collection<?> c = new ArrayList<String>();
上記の2つの一般的なコレクションは、正当なコードでさえありますか?私のロジックによる2番目は、インターフェイスのみを許可しません。最初のものは完全に役に立たないように見えます。制御を試みないジェネリックを使用するのはなぜですか?