Java ジェネリックスに上限および下限のワイルドカードを使用する方法

王林
リリース: 2023-05-20 08:23:01
転載
1516 人が閲覧しました

上限

ジェネリックの上限は、型パラメータが特定のクラスのサブクラスであるか、特定のインターフェイスを実装する必要があることを指定します。その構文は T extends B です。ここで、T はジェネリック型パラメーター、B は上限型です。たとえば、次のコードはジェネリック クラス Box を示しており、その型パラメータ T は Number またはそのサブクラスである必要があります。

public class Box<T extends Number> {
    private T value;
    public Box(T value) {
        this.value = value;
    }
    public T getValue() {
        return value;
    }
}
ログイン後にコピー

上記のコードでは、 extends キーワードを使用して、ジェネリック型パラメーターの上限型を指定します。これは、ジェネリック型パラメーターが Number またはそのサブクラスである必要があることを意味します。このように、Box クラスを使用して、IntegerDoubleFloat などの型の値を格納できます。これらはすべて Number のサブクラスであるためです。さらに、ジェネリックスの上限を使用することで、Number 型の値のみが Box クラスのインスタンスに格納されるようになり、型変換例外のリスクを回避できます。 。

ジェネリックを使用する場合、型が上限を満たさないパラメーターを渡すと、コンパイル中にエラーが発生します。例:

Box<String> box = new Box<>("Hello World");    // 编译错误:String 不是 Number 的子类
ログイン後にコピー

下限

ジェネリックの下限は、型パラメータが特定のクラスのスーパークラスまたはインターフェイスの実装クラスである必要があることを指定します。その構文は T super B です。ここで、T はジェネリック型パラメーター、B は下限型です。以下は、型パラメータ T が Object またはそのスーパークラスである必要があるジェネリック クラス Box を示す例です。

public class Box<T super Object> {
    private T value;
    public Box(T value) {
        this.value = value;
    }
    public T getValue() {
        return value;
    }
}
ログイン後にコピー

上記のコードでは、 を使用しました。 super キーワードを使用して、ジェネリック型パラメーターの下限型を指定します。これは、ジェネリック型パラメーターが Object またはそのスーパークラスである必要があることを意味します。このように、Box クラスを使用して、ObjectStringIntegerDouble、などの値はすべて Object のサブクラスであるためです。さらに、ジェネリックの下限を使用することで、Box クラスのインスタンスに格納される値がすべて Object 型であることを保証し、型のリスクを回避できます。変換の例外。

ジェネリックを使用する場合、型が下限を満たさないパラメーターを渡すと、コンパイル中にエラーが発生します。例:

Box<Integer> box = new Box<>(123);    // 编译错误:Integer 不是 Object 的超类
ログイン後にコピー

上限と下限のワイルドカード

場合によっては、ジェネリックスで上限と下限の両方を使用する必要がある場合、ワイルドカード ? を使用して未知の型を表すことができます。たとえば、次のコードは、ある配列の要素を別の配列にコピーする汎用メソッド copy を示しています。

public static <T> void copy(List<? extends T> src, List<? super T> dest) {
    for (T t : src) {
        dest.add(t);
    }
}
ログイン後にコピー

上記のコードでは、ワイルドカード文字 ?# を使用しています。 ## 未知の型を表すには、src パラメータが T 型またはそのサブクラスであること、dest パラメータが T であることの両方を満たすことができます。型またはそのスーパークラスについて。このようにして、任意のタイプの要素を別のリストにコピーできます。上限と下限のワイルドカードを使用することで、型の安全性を確保しながら、ジェネリック メソッドをより柔軟に定義できます。

以上がJava ジェネリックスに上限および下限のワイルドカードを使用する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:yisu.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート