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

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

Jan 07, 2025 am 06:27 AM

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 までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

会社のセキュリティソフトウェアはアプリケーションの実行に失敗していますか?それをトラブルシューティングと解決する方法は? 会社のセキュリティソフトウェアはアプリケーションの実行に失敗していますか?それをトラブルシューティングと解決する方法は? Apr 19, 2025 pm 04:51 PM

一部のアプリケーションが適切に機能しないようにする会社のセキュリティソフトウェアのトラブルシューティングとソリューション。多くの企業は、内部ネットワークセキュリティを確保するためにセキュリティソフトウェアを展開します。 ...

名前を数値に変換してソートを実装し、グループの一貫性を維持するにはどうすればよいですか? 名前を数値に変換してソートを実装し、グループの一貫性を維持するにはどうすればよいですか? Apr 19, 2025 pm 11:30 PM

多くのアプリケーションシナリオでソートを実装するために名前を数値に変換するソリューションでは、ユーザーはグループ、特に1つでソートする必要がある場合があります...

MapsTructを使用したシステムドッキングのフィールドマッピングの問題を簡素化する方法は? MapsTructを使用したシステムドッキングのフィールドマッピングの問題を簡素化する方法は? Apr 19, 2025 pm 06:21 PM

システムドッキングでのフィールドマッピング処理は、システムドッキングを実行する際に難しい問題に遭遇することがよくあります。システムのインターフェイスフィールドを効果的にマッピングする方法A ...

Intellijのアイデアは、ログを出力せずにSpring Bootプロジェクトのポート番号をどのように識別しますか? Intellijのアイデアは、ログを出力せずにSpring Bootプロジェクトのポート番号をどのように識別しますか? Apr 19, 2025 pm 11:45 PM

intellijideaultimatiateバージョンを使用してスプリングを開始します...

エンティティクラス変数名をエレガントに取得して、データベースクエリ条件を構築する方法は? エンティティクラス変数名をエレガントに取得して、データベースクエリ条件を構築する方法は? Apr 19, 2025 pm 11:42 PM

データベース操作にMyBatis-Plusまたはその他のORMフレームワークを使用する場合、エンティティクラスの属性名に基づいてクエリ条件を構築する必要があることがよくあります。あなたが毎回手動で...

Javaオブジェクトを配列に安全に変換する方法は? Javaオブジェクトを配列に安全に変換する方法は? Apr 19, 2025 pm 11:33 PM

Javaオブジェクトと配列の変換:リスクの詳細な議論と鋳造タイプ変換の正しい方法多くのJava初心者は、オブジェクトのアレイへの変換に遭遇します...

Redisキャッシュソリューションを使用して、製品ランキングリストの要件を効率的に実現する方法は? Redisキャッシュソリューションを使用して、製品ランキングリストの要件を効率的に実現する方法は? Apr 19, 2025 pm 11:36 PM

Redisキャッシュソリューションは、製品ランキングリストの要件をどのように実現しますか?開発プロセス中に、多くの場合、ランキングの要件に対処する必要があります。

eコマースプラットフォームSKUおよびSPUデータベースデザイン:ユーザー定義の属性と原因のない製品の両方を考慮する方法は? eコマースプラットフォームSKUおよびSPUデータベースデザイン:ユーザー定義の属性と原因のない製品の両方を考慮する方法は? Apr 19, 2025 pm 11:27 PM

eコマースプラットフォーム上のSKUおよびSPUテーブルの設計の詳細な説明この記事では、eコマースプラットフォームでのSKUとSPUのデータベース設計の問題、特にユーザー定義の販売を扱う方法について説明します。

See all articles