タイプパラメータを持つクラスとメソッドの定義

Javaのジェネリクスにおける「タイプパラメータを持つクラスとメソッドの定義」は、型の再利用性と型安全性を高めるために非常に重要な概念です。以下に詳しく説明します。


1. タイプパラメータとは

タイプパラメータ(Type Parameter)は、クラスやメソッドを定義する際に「扱うデータ型を後から決定できる」ようにするための記号です。通常、T(Type)、E(Element)、K(Key)、V(Value)などの記号が使われます。


2. ジェネリクスクラスの定義

書式:

java
class クラス名<T> { private T value; public void setValue(T value) { this.value = value; } public T getValue() { return value; } }

例:

java
class Box<T> { private T content; public void set(T content) { this.content = content; } public T get() { return content; } }

このクラスは任意の型を扱える「箱」です。例えば以下のように使います:

java
Box<String> stringBox = new Box<>(); stringBox.set("Hello"); String s = stringBox.get(); Box<Integer> intBox = new Box<>(); intBox.set(123); Integer i = intBox.get();

利点:

  • 型安全:コンパイル時に型の整合性をチェックできる。

  • 汎用性:同じコードを複数の型に対して使える。


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

書式:

java
class クラス名 { public <T> T メソッド名(T 引数) { // 処理 return 引数; } }

例:

java
class Util { public static <T> T echo(T input) { return input; } }

このメソッドは、渡された任意の型の値をそのまま返します。

java
String s = Util.echo("Hello"); Integer i = Util.echo(42);

ポイント:

  • <T> は戻り値型の前に書き、メソッドがジェネリックであることを明示します。

  • static メソッドにも使用可能です。


4. 複数のタイプパラメータ

クラスやメソッドに複数の型パラメータを指定することも可能です。

例:

java
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; } }

5. 制限付きタイプパラメータ(上限境界)

型に「あるクラスのサブクラスに限定する」といった制約を加えることもできます。

例:

java
public <T extends Number> void printDouble(T number) { System.out.println(number.doubleValue()); }

このメソッドは Number またはそのサブクラス(Integer, Double など)だけを受け取ることができます。


まとめ

用法 説明
<T> ジェネリクスで型パラメータを宣言
class Box<T> 任意の型Tを扱うクラスを定義
<T> T method(T arg) 任意の型Tを扱うメソッドを定義
<T extends クラス> 型Tに制限を加える

生成日:2025/05/03