適切なタイトルがよくわからなかったのですが、以下のブログの内容についての質問です。
http://d.hatena.ne.jp/ryoasai/20110325/1301078699
内容はジェネリクスの非変性、共変性、反変性についてです。
以下のような記述があります。
「反変な型変数はメソッドの入力パラメータの型としてのみ使える
共変な型変数はメソッドの戻り値の型としてのみ使える」
これについての質問です。
自分でも色々試してみたのですが、いまいち納得できません。
私の考えていることとブログの内容で剥離があるかもしれないと感じたので、質問いたします。
まずは、「反変性は入力パラメータとして使える」についてです。
以下のようなコードを考えました。
Java
1public static Integer methodA(List<Integer> list) { 2 if(!list.isEmpty()){ 3 return list.get(0); 4 } else { 5 return null; 6 } 7 }
上のコードで基本的にlistは空ではないとすると、一番初めの要素が帰ってくるわけです。
「反変性は入力パラメータに使える」ということはList<Number>
型のパラメータを引数に指定できるという意味になるのでしょうか?
そうすると、戻り値の方はNumber
型になってしまうのですが、それはまずいのではないでしょうか?
また、「共変性は戻り値の型として使える」についてですが、
以下のようなコードを考えました。
Java
1public static <E> ArrayList<E> methodB(E element) { 2 ArrayList<E> list = new ArrayList<E>(); 3 list.add(element); 4 return list; 5 }
そして、
Java
1ArrayList<Number> list = methodB(new Integer(1)); 2list.add(new Double(1.0));
はもし共変性があれば、可能なのですが、この時これに付随する問題は2行めに示したコードで正直なところ「共変性は戻り値の型として使える」という文の意味がよくわかりません。
すみませんが、簡単な解説をお願いします。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2016/10/02 03:11
2016/10/02 03:17
退会済みユーザー
2016/10/02 04:18
2016/10/02 04:22 編集
退会済みユーザー
2016/10/02 07:40