問題一覧に戻る
中級コレクション
問題90: 型パラメータ

境界ワイルドカードはジェネリックプログラミングに柔軟性を提供します。'? extends T'(上限境界)は読み取り操作のためにTとそのサブタイプを受け入れ、'? super T'(下限境界)は書き込み操作のためにTとそのスーパータイプを受け入れます。このPECS原則(Producer Extends、Consumer Super)により、メソッドは型安全性を維持し実行時エラーを防ぎながら関連する型で動作できます。

import java.util.*;

public class Main {
// 上限境界ワイルドカード
static void printNumbers(List< extends Number> list) {
for (Number num : list) {
System.out.println(num);
}
}

// 下限境界ワイルドカード
static void addNumbers(List< super Integer> list) {
list.add(10);
list.add(20);
}

public static void main(String[] args) {
List<Integer> integers = Arrays.asList(1, 2, 3);
List<Double> doubles = Arrays.asList(1.1, 2.2);

// 両方呼び出し可能
printNumbers();
printNumbers();

List<Number> numbers = new ArrayList<>();
addNumbers();
System.out.println(numbers);
}
}