ジェネリクス
- ワイルドカード型>...総称型パラメータの変性を変更する仕組み
- ?...非境界ワイルドカード型(型が...不明なのでgetした要素の型はObject型)
- ? extends T ... 上限境界ワイルドカード型(少なくてもTのサブクラス: 共変)
- ? super T ... 下限境界ワイルドカード型(少なくてもTのスーパークラス: 反変)
- 読み込みには上限境界ワイルドカード型、書き込み時には下限境界ワイルドカード型を使う
// Point: Java のコレクションは非変なので List<Object> と
// List<Integer> には親子関係がないものとみなす。
// (配列の場合は共変なので代入可)つまり、
List<Integer> li = Arrays.asList(1, 2);
List<Object> lo = li; // NG
//となるが、総称型パラメータにワイルドカード型を使うことで
//制約を変更可能
Lust<?> lw = li; // OK
命名慣習
記号 | 概要 |
---|---|
E | 要素(Element) |
K | キー(Key) |
T | 型(Type) |
V | 値(Value) |
N | 数値(Number) |
R | 戻り値型(Return) |
S, U, V | 2番目、3番目、4番目… |