Java ジェネリックを使用すると、型パラメータを使用してクラス、インターフェイス、メソッドを定義できます。これは、コンパイル時に型の安全性を確保しながら、さまざまなデータ型で動作するコードを作成できることを意味します。
ジェネリックは Java 5 で導入された機能で、操作対象のデータ型のプレースホルダーを使用してクラス、インターフェイス、またはメソッドを定義できるようにします。これは、コンパイル時の型の安全性を確保しながら、任意の型で動作できるクラスとメソッドを作成するのに役立ちます。
例:
public class Box<T> { private T value; public void setValue(T value) { this.value = value; } public T getValue() { return value; } }
この例では、T は、Box のインスタンスを作成するときに任意のデータ型に置き換えることができる型パラメーターです。
ジェネリックにはいくつかの利点があります:
例:
ジェネリックなし:
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 つの値を保持するジェネリック クラスのペアを考えてみましょう。
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());
ジェネリック クラスまたはメソッドで使用できる型を制限したい場合があります。境界付き型パラメーターを使用すると、受け入れ可能な型の範囲を指定できます。
例:
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
ジェネリックはクラスに限定されません。これらをメソッド内で使用して、柔軟でタイプセーフなメソッドを作成することもできます。
これは 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; } }
ワイルドカードを使用すると、より柔軟な方法で許容可能な型の範囲を指定できます。例えば、 ? 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
Java ジェネリックスをマスターすると、コードの柔軟性と安全性が大幅に向上します。クラス、メソッド、およびワイルドカードでジェネリックを使用する方法を理解することで、より堅牢で再利用可能なコードを作成できるようになります。ご質問がある場合、またはさらに説明が必要な場合は、お気軽に以下にコメントを残してください。
投稿の詳細については、 をご覧ください: Mastering Java Generics: A Comprehensive Guide with Code Examples
以上がJava ジェネリックの習得: コード例を含む包括的なガイドの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。