質問: Javaのジェネリクスについて学んでいるのですが、仮型パラメータ(など)と、ワイルドカード型List>の違いがわかりません。 なぜ?をEとして使ってはいけない場合があるのですか? どういう使い分けをすればいいのでしょうか。
回答: 仮型パラメータはクラス設計の際にいろいろな型で使えるようにするために、「その時使う型を仮にこういう名前の型だとして」というような感じで決定します。クラス記述時には確定しませんが、そのクラスを使ってコードを記述し、インスタンス化した時などにその仮型パラメータの正体が確定し、クラスのメソッドの引数の型、返り値の型などが確定します。 一方、ワイルドカードはList>であれば、変数の型として使うときに、「Listであることは確かだけど、そのListが扱う型はわからない(あるいは制限したくない)」というような場合に使います。