メインコンテンツにスキップ
モジュール 6 · レッスン 2 / 2コース内の 12/14~15 min
モジュールのレッスン (2/2)

Java のジェネリックス

ジェネリック (ジェネリック型) は、クラス、インターフェイス、メソッドがパラメーターとしてさまざまな型を操作できるようにするために Java に導入されました。これにより、コンパイル時の型の安全性が確保され、実行時のコストのかかる明示的なキャストが回避されます。

汎用クラス

ジェネリック クラスは、山括弧 <T> を使用して定義されます。T は、クラスがインスタンス化されるときに指定される型のプレースホルダーとして機能します。

Java
public class Box<T> {
    private T content;

    public void setContent(T content) {
        this.content = content;
    }

    public T getContent() {
        return content;
    }
}

Box オブジェクトを作成するときは、実際のタイプを指定します。

Java
Box<Integer> integerBox = new Box<>();
integerBox.setContent(123);
int value = integerBox.getContent(); // No cast needed!

一般的なメソッド

さまざまな型パラメーターを受け入れることができる単一のジェネリック メソッドを定義できます。 type パラメータはメソッドの戻り値の型の前に配置されます。

Java
public static <E> void printArray(E[] elements) {
    for (E element : elements) {
        System.out.println(element);
    }
}

ワイルドカードと境界付きタイプ

extends キーワード (上限) を使用して、ジェネリックによって受け入れられる型を制限し、特定の型またはそのサブクラスを受け入れることができます。

Java
public static <T extends Number> void processNumber(T number) {
    // Accepts Integer, Double, Float, etc.
    System.out.println(number.doubleValue());
}

自分で試してみてください

運動#java.m6.l2.e1
試行回数: 0読み込み中…

T を返すゲッター getValue() とプライベート変数値を設定するセッター setValue(T value) を定義して、ジェネリック クラス Box を完成させます。

エディターを読み込み中…
ヒントを表示

ジェネリック型パラメーター `T` を使用して、正しいシグネチャを持つメソッドを作成します。

3 回の試行後に解決策が利用可能になります

運動#java.m6.l2.e2
試行回数: 0読み込み中…

array という名前の T[] 型の配列を受け取り、for-each ループを使用して各要素を出力する静的ジェネリック メソッド printArray を作成します。

エディターを読み込み中…
ヒントを表示

型パラメータ `<T>` は、`static` の直後、戻り値の型 `void` の前に配置する必要があります。

3 回の試行後に解決策が利用可能になります

運動#java.m6.l2.e3
試行回数: 0読み込み中…

String でパラメータ化された Container インターフェイスを実装する静的クラス StringContainer を作成します。 String パラメーターを受け取るコンストラクターを定義し、getItem() メソッドを実装します。

エディターを読み込み中…
ヒントを表示

クラス シグネチャと `getItem()` の戻り値の型で、ジェネリック型 `T` を `String` に置き換えます。

3 回の試行後に解決策が利用可能になります