モジュールのレッスン (2/2)
Java のジェネリックス
ジェネリック (ジェネリック型) は、クラス、インターフェイス、メソッドがパラメーターとしてさまざまな型を操作できるようにするために Java に導入されました。これにより、コンパイル時の型の安全性が確保され、実行時のコストのかかる明示的なキャストが回避されます。
汎用クラス
ジェネリック クラスは、山括弧 <T> を使用して定義されます。T は、クラスがインスタンス化されるときに指定される型のプレースホルダーとして機能します。
public class Box<T> {
private T content;
public void setContent(T content) {
this.content = content;
}
public T getContent() {
return content;
}
}Box オブジェクトを作成するときは、実際のタイプを指定します。
Box<Integer> integerBox = new Box<>();
integerBox.setContent(123);
int value = integerBox.getContent(); // No cast needed!一般的なメソッド
さまざまな型パラメーターを受け入れることができる単一のジェネリック メソッドを定義できます。 type パラメータはメソッドの戻り値の型の前に配置されます。
public static <E> void printArray(E[] elements) {
for (E element : elements) {
System.out.println(element);
}
}ワイルドカードと境界付きタイプ
extends キーワード (上限) を使用して、ジェネリックによって受け入れられる型を制限し、特定の型またはそのサブクラスを受け入れることができます。
public static <T extends Number> void processNumber(T number) {
// Accepts Integer, Double, Float, etc.
System.out.println(number.doubleValue());
}自分で試してみてください
T を返すゲッター getValue() とプライベート変数値を設定するセッター setValue(T value) を定義して、ジェネリック クラス Box を完成させます。
ヒントを表示
ジェネリック型パラメーター `T` を使用して、正しいシグネチャを持つメソッドを作成します。
3 回の試行後に解決策が利用可能になります
array という名前の T[] 型の配列を受け取り、for-each ループを使用して各要素を出力する静的ジェネリック メソッド printArray を作成します。
ヒントを表示
型パラメータ `<T>` は、`static` の直後、戻り値の型 `void` の前に配置する必要があります。
3 回の試行後に解決策が利用可能になります
String でパラメータ化された Container インターフェイスを実装する静的クラス StringContainer を作成します。 String パラメーターを受け取るコンストラクターを定義し、getItem() メソッドを実装します。
ヒントを表示
クラス シグネチャと `getItem()` の戻り値の型で、ジェネリック型 `T` を `String` に置き換えます。
3 回の試行後に解決策が利用可能になります