1.の場合はジェネリクスに使った型を使うことができますが、2.の場合は使えません。
java
1//1.を使った例
2public static <T> T method1(List<T extends Number> list) {
3 T t = list.get(0);
4 return t;
5}
6
7//2.を使った例
8public static Number method2(List<? extends Number> list) {
9 Number num = list.get(0);
10 return num;
11}
どちらのコードも、Numberを継承した型を扱うListなら何でも渡せますが、
前者のコードは、引数にList<Integer>を渡せばIntegerが、List<Double>を渡せばDoubleとして帰ってきます。
一方、後者のコードはList<Integer>を渡そうがList<Double>を渡そうが、返り値の型としてIntegerやDoubleは使うことができず、最高でもNumberとしてしか返すことができません。
また1.はこのようにメソッドで使ったり、クラス宣言のジェネリクスで使ったりすることはできますが、変数の型として使うことはできません。2.は変数の型として使うことができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2019/01/13 05:54