問題一覧に戻る
中級コレクション
問題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);
}
}