ジェネリックス
概要
型をパラメータで決定するものです。
クラス定義
書式
class クラス名<型パラメータ [extends 型 | super 型][,型パラメータ [extends 型 | super 型]]…>{
項目 | 説明 |
型パラメータ | 型を指定します。 |
extends | 指定したサブクラスを許可します。 |
super | 指定したスーパークラスを許可します。 |
変数宣言
書式
クラス名<型 [,型]…> 変数名;
クラス名 [extends 型 | super 型]> 変数名;
クラス名 [extends 型 | super 型]> 変数名;
生成
書式
new クラス名<型>([引数リスト]);
解説
ジェネリックスとは総称型と呼ばれるもので、
型情報を可変にすることで柔軟なクラスを作成することができます。
以下の利点があります。
・型を限定できます。
・キャストが不要になります。
・型の不一致をコンパイル時に検出できます。
特にコレクションの操作で真価を発揮します。
型パラメータはクラスのみ指定でき、プリミティブは指定できません。
型パラメータ アルファベット大文字一字であることが多いです。
T(Type)やE(Element)がよく使われます。
・型を限定できます。
・キャストが不要になります。
・型の不一致をコンパイル時に検出できます。
特にコレクションの操作で真価を発揮します。
型パラメータはクラスのみ指定でき、プリミティブは指定できません。
概要 | ジェネリックスあり | ジェネリックスなし | 説明 |
宣言 | List | List | 宣言時に型を指定します。 |
アクセス | String str = list.get(0); | String str = (String)list.get(0); | ジェネリックスありではキャストが不要になります。 |
T(Type)やE(Element)がよく使われます。
詳細
ワイルドカードによる型指定
? suer 型 指定したクラスのスーパークラスなら可能
? extends 型 指定したクラスのサブクラスなら可能
Cl> v = ok
class Cl> error
? extends 型 指定したクラスのサブクラスなら可能