Javaのジェネリック型拡張:Java汎用タイプ:List <?数を拡張>とList <Tは数>
(1) List <? extends Number>
(2) List <T extends Number>
との差が、私の理解あたりとして何
(1)List <? extends Number>
は "不明" は、データの 読み取り専用のリストですスーパークラス "番号"と入力します。要素を読み取ることはできますが、追加することはできません。
(2)List <T extends Number>
スーパークラス "番号"のデータ型のリスト。私は、エラーを取得sumOfList2に整数(または偶数オブジェクト)を追加しようとしていたとき、私たちは
class TestGen{
public static void main(String[] args) {
double result = 0.0;
List<Integer> intList = new ArrayList<Integer>();
intList.add(10);
intList.add(20);
intList.add(30);
result = TestGen.sumOfList1(intList);
System.out.println("Result=" + result);
result = TestGen.sumOfList2(intList);
System.out.println("Result=" + result);
}
public static double sumOfList1(List<? extends Number> list) {
double s = 0.0;
for (Number n : list)
s += n.doubleValue();
return s;
}
public static <T extends Number> double sumOfList2(List<T> list) {
double s = 0.0;
// -- ---------------------------------------------------------
// getting error while trying to add new element
// list<T> is not applicable for argument(Integer) : Why ?
list.add(new Integer(40));
for (Number n : list)
s += n.doubleValue();
return s;
}
}
次のコード例を参照してくださいリスト
に要素を読み、追加してくださいすることができます。何が間違っているのか説明してください。
なぜそれが落とされたのか、何かのヒント?どうかしましたか? – BVMR
誰が投票したのか分かりません。この解決策は機能します。キャスティングが必要な理由を明かすことができますか? list.add((T)new Integer(40)); サブクラスのみのオブジェクトを追加している間(IntegerはNumberのサブクラスです) –
'T'にキャストすると' type safety'という警告が出ます。 – GGrec