ホームページ  >  記事  >  Java  >  Java の汎用メソッドとワイルドカードの使用の違いは何ですか?

Java の汎用メソッドとワイルドカードの使用の違いは何ですか?

WBOY
WBOYオリジナル
2024-05-02 11:51:021153ブラウズ

ジェネリック メソッドには、操作可能なデータ型を指定する型パラメーターがあります。ワイルドカードは不明な型を表し、上位のワイルドカードはその型が特定の型のサブクラスまたはそれ自体であることを指定し、下位のワイルドカードはその型が親クラスまたはそれ自体であることを指定します。

Java 泛型方法与通配符的使用有何区别?

#Java ジェネリック メソッドとワイルドカードの違い

はじめに

Generics Itは、開発者がデータ型の非互換性を心配することなく再利用可能なコードを作成できる Java の強力なツールです。ジェネリック メソッドとワイルドカードは、ジェネリックの機能をさらに強化する 2 つのメカニズムです。この記事では、それらの違いを説明し、実際の例を通してそれらの使用方法を示します。

ジェネリック メソッド

ジェネリック メソッドは、型パラメーターを持つメソッドです。型パラメーターは、メソッドが使用できるデータ型を指定します。たとえば、次のジェネリック メソッドは、任意の型のリストを操作できます:

public static <T> void printList(List<T> list) {
    for (T item : list) {
        System.out.print(item + " ");
    }
    System.out.println();
}

ジェネリック メソッドは、メソッドの使用時に型パラメータを指定することで呼び出すことができます:

List<String> names = new ArrayList<>();
names.add("John");
names.add("Mary");

printList(names); // 输出:John Mary

Wildcards

ワイルドカードは、未知の型を表すために使用される特別な構文です。これらは、ジェネリックの上限または下限を作成するためによく使用されます。

  • 上限ワイルドカード (? は T を拡張) 不明な型が T 型のサブクラス、または T 自体であることを示します。
  • 下限ワイルドカード (? super T) 不明な型が T 型の親クラス、または T 自体であることを示します。
たとえば、次の汎用メソッドは、上限ワイルドカードを使用して、リスト内のすべてのオブジェクトのスーパークラスを取得します。

public static <T> List<Class<?>> getSuperclasses(List<? extends T> list) {
    List<Class<?>> superclasses = new ArrayList<>();
    for (T item : list) {
        superclasses.add(item.getClass().getSuperclass());
    }
    return superclasses;
}

実用的なケース

次のケースを考えてみましょう。Animal インターフェイスを実装する Animal クラスがあり、動物のリストを出力するメソッドが必要です。

#汎用メソッド

あらゆる種類の動物を印刷するための汎用メソッドを作成できます:

public static <T extends Animal> void printAnimals(List<T> animals) {
    for (T animal : animals) {
        System.out.println(animal.getName());
    }
}

Wildcard

ワイルドカードを使用して、Animal のサブクラスを表すこともできます。

public static void printAnimals(List<? extends Animal> animals) { // 使用上限通配符
    for (Animal animal : animals) { // 使用上限通配符
        System.out.println(animal.getName());
    }
}

どちらの場合も、単一のメソッドを使用して、さまざまな種類の動物のリストを出力できます。ただし、ジェネリック メソッドは、型パラメータに Animal インターフェイスの継承を強制するため、型安全性を提供しますが、ワイルドカードはこの保証を提供しません。

以上がJava の汎用メソッドとワイルドカードの使用の違いは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。