ホームページ > Java > &#&チュートリアル > Java ジェネリックの習得: コード例を含む包括的なガイド

Java ジェネリックの習得: コード例を含む包括的なガイド

Linda Hamilton
リリース: 2025-01-07 06:27:49
オリジナル
794 人が閲覧しました

1. Java ジェネリックの基本を理解する

Mastering Java Generics: A Comprehensive Guide with Code Examples

Java ジェネリックを使用すると、型パラメータを使用してクラス、インターフェイス、メソッドを定義できます。これは、コンパイル時に型の安全性を確保しながら、さまざまなデータ型で動作するコードを作成できることを意味します。

1.1 ジェネリック医薬品とは何ですか?

ジェネリックは Java 5 で導入された機能で、操作対象のデータ型のプレースホルダーを使用してクラス、インターフェイス、またはメソッドを定義できるようにします。これは、コンパイル時の型の安全性を確保しながら、任意の型で動作できるクラスとメソッドを作成するのに役立ちます。

例:

public class Box<T> {
    private T value;

    public void setValue(T value) {
        this.value = value;
    }

    public T getValue() {
        return value;
    }
}
ログイン後にコピー
ログイン後にコピー

この例では、T は、Box のインスタンスを作成するときに任意のデータ型に置き換えることができる型パラメーターです。

1.2 なぜジェネリックを使用するのか?

ジェネリックにはいくつかの利点があります:

  • 型安全性 : コンパイル時に型の不一致を検出することで、キャストの必要性を排除し、実行時エラーを削減します。
  • コードの再利用性 : 異なるデータ型を処理できる単一のクラスまたはメソッドを作成できます。
  • キャストを排除します : ジェネリックスを使用すると、型キャストの必要性が減り、コードがクリーンになり、エラーが発生しにくくなります。

例:

ジェネリックなし:

List list = new ArrayList();
list.add("Hello");
String s = (String) list.get(0); // Casting needed
ログイン後にコピー
ログイン後にコピー

ジェネリックの場合:

List<String> list = new ArrayList<>();
list.add("Hello");
String s = list.get(0); // No casting needed
ログイン後にコピー
ログイン後にコピー

2. クラスでのジェネリックスの操作

ジェネリックをクラスとともに使用すると、型の安全性と柔軟性を確保できます。クラス定義でジェネリックを効果的に使用する方法を次に示します。

2.1 汎用クラスの例

おそらく異なる型の 2 つの値を保持するジェネリック クラスのペアを考えてみましょう。

public class Pair<K, V> {
    private K key;
    private V value;

    public Pair(K key, V value) {
        this.key = key;
        this.value = value;
    }

    public K getKey() {
        return key;
    }

    public V getValue() {
        return value;
    }
}
ログイン後にコピー

この例では、K と V は、Pair のインスタンスを作成するときに指定できる型パラメーターです。

使用例:

Pair<String, Integer> pair = new Pair<>("Age", 30);
System.out.println("Key: " + pair.getKey() + ", Value: " + pair.getValue());
ログイン後にコピー

2.2 有界型パラメータ

ジェネリック クラスまたはメソッドで使用できる型を制限したい場合があります。境界付き型パラメーターを使用すると、受け入れ可能な型の範囲を指定できます。

例:

public class NumberUtils {
    public static <T extends Number> void printNumber(T number) {
        System.out.println("Number: " + number);
    }
}
ログイン後にコピー

ここで、T は Integer、Double などの Number のサブクラスに制限されます。

使用例:

NumberUtils.printNumber(10); // Valid
NumberUtils.printNumber(10.5); // Valid
ログイン後にコピー

3. メソッド内のジェネリックス

ジェネリックはクラスに限定されません。これらをメソッド内で使用して、柔軟でタイプセーフなメソッドを作成することもできます。

3.1 一般的なメソッドの例

これは 2 つの値の最大値を返すメソッドです:

public class Util {
    public static <T extends Comparable<T>> T max(T a, T b) {
        return a.compareTo(b) > 0 ? a : b;
    }
}
ログイン後にコピー

このメソッドでは、T は Comparable を拡張する必要がある型パラメーターであり、T が比較できることを保証します。

使用例:

public class Box<T> {
    private T value;

    public void setValue(T value) {
        this.value = value;
    }

    public T getValue() {
        return value;
    }
}
ログイン後にコピー
ログイン後にコピー

3.2 ジェネリックにおけるワイルドカード

ワイルドカードを使用すると、より柔軟な方法で許容可能な型の範囲を指定できます。例えば、 ? extends T は T を拡張する未知の型を示しますが、? super T は、T のスーパータイプである未知の型を示します。

例:

List list = new ArrayList();
list.add("Hello");
String s = (String) list.get(0); // Casting needed
ログイン後にコピー
ログイン後にコピー

使用例:

List<String> list = new ArrayList<>();
list.add("Hello");
String s = list.get(0); // No casting needed
ログイン後にコピー
ログイン後にコピー

4. 結論

Java ジェネリックスをマスターすると、コードの柔軟性と安全性が大幅に向上します。クラス、メソッド、およびワイルドカードでジェネリックを使用する方法を理解することで、より堅牢で再利用可能なコードを作成できるようになります。ご質問がある場合、またはさらに説明が必要な場合は、お気軽に以下にコメントを残してください。

投稿の詳細については、 をご覧ください: Mastering Java Generics: A Comprehensive Guide with Code Examples

以上がJava ジェネリックの習得: コード例を含む包括的なガイドの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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