ジェネリクスは,J2SE 5.0以降で使用できる機能です。ジェネリクスを使用すると,さまざまな型のオブジェクトを型やメソッドで使用する場合に,コンパイル時に型の安全性を保証できます。また,ジェネリクスを使用することで,データの型に依存しない,型そのものをパラメタとして扱うプログラミングを実現できます。
型を変数化することを型変数といいます。型変数は,ジェネリクスを使用したクラス,インタフェース,メソッドまたはコンストラクタの宣言時に使用します。「List<E> extends Collection<E>」という定義の場合,<E>の部分が型変数に該当します。
また,ジェネリクスを使用したクラス,インタフェース,メソッド,またはコンストラクタに対して,具体的なパラメタの型を指定することをパラメタ化といいます。例えば,「List<String>」,「Collection<Integer>」などが,パラメタ化されたクラスです。
インタフェースでは,メソッドの引数,戻り値,および例外で型変数を使用できます。使用する型変数は,インタフェース定義で宣言します。
型変数を使用できるインタフェースの種類をEnterprise Beanの種別ごとに次の表に示します。
表4-5 型変数を使用できるインタフェースの種類
インタフェースの種類 | Enterprise Beanの種別 | ||
---|---|---|---|
Session Bean | Entity Bean | Message-driven Bean | |
ビジネスインタフェース | △ | - | - |
Homeインタフェース | × | × | - |
Componentインタフェース | × | × | - |
メッセージリスナインタフェース | - | - | ○ |
その他(任意のインタフェース) | ○ | ○ | ○ |
インタフェースで定義した型変数をビジネスインタフェースでパラメタ化した際に,パラメタ化したビジネスインタフェースのメソッドを再定義した場合,型変数を使用した個所とインタフェース種別の組み合わせによって,エラーになることがあります。エラーが発生した場合は,再定義したメソッドを削除して対処してください。
ビジネスインタフェースでメソッドを再定義した場合にエラーとなる組み合わせを次の表に示します。
表4-6 ビジネスインタフェースでメソッドを再定義した場合にエラーとなる組み合わせ
型変数を使用した個所 | ローカルインタフェース | リモートインタフェース |
---|---|---|
戻り値 | ○ | ○ |
引数 | × | × |
例外 | ○ | ○ |
エラーが発生するのは,次の項目の両方に該当する場合です。
エラーが発生するコーディングの例を次に示します。この例の場合,エラーを回避するためには,MyInterfaceの定義からメソッド「String get(Float args)」の定義を削除する必要があります。
public interface SuperInterface<T> { |
クラスでは,メソッドのシグネチャおよびメソッド内で型変数を使用できます。
型変数を使用できるクラスの種類をEnterprise Beanの種別ごとに次の表に示します。
表4-7 型変数を使用できるクラスの種類
クラスの種類 | Enterprise Beanの種別 | ||
---|---|---|---|
Session Bean | Entity Bean | Message-driven Bean | |
Enterprise Beanクラス | ○ | ○ | ○ |
インターセプタクラス | ○ | - | - |
その他(任意のクラス) | ○ | ○ | ○ |