当サイトは、アフィリエイト広告を利用しています

今更だがjavaのジェネリクスについてまとめてみた

作成日:2022月03月15日
更新日:2024年01月27日

javaのジェネリクスを使用方法(仮型パラメータ)を使った
クラス、メソッドの定義方法をまとめる

使用例

基本的にはクラス、またはメソッド内で動的に型を使いたい時に使用するイメージ
汎用的な処理を行うメソッド、クラスで処理を行う型を動的に決めたい場合などに使用する。

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

SomeClass< T >と書くと、その型パラメータTをクラスのフィールドや
(引数、戻り値を含めた)メソッド内で使用することができる。

ジェネリクスクラス

java
// ↓ここに型パラメータを書く
public class SomeClass<T> {
private T t;
private List<T> list = new ArrayList<T>();
public void set(T arg){
this.t = arg;
}
public T get(){
return this.t;
}
}

使う時

java
//使用時に仮型パラメータを指定する
SomeClass<String> some = new SomeClass<>();
some.set("テスト1");

上記の

java
SomeClass<String> some = new SomeClass<>();

で使う時、ジェネリクスクラスは下記のようなイメージ
※< T >の部分がString型に置き換わっている

java
public class SomeClass {
private String t;
private List<String> list = new ArrayList<String>();
public void set(String arg){
this.t = arg;
}
public String get(){
return this.t;
}
}

注意点

なお、以下のようにジェネリッククラスの仮型パラメータを
そのクラス内のstaticメソッドやstatic文の中で使用することはできない。

java
public class Hoge<T>{
static {
T t; // コンパイルエラー
}
public static void hoge(T t){ // コンパイルエラー
}
}

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

メソッドの戻り値の型の手前にTを書くと、
その型パラメータTをメソッド内で使用することができる。

java
// ↓ここに型パラメータを書く
public static <T> ArrayList<T> someMethod(T arg){
ArrayList<T> list = new ArrayList<T>();
list.add(arg);
return list;
}

使う時

java
String hoge = "ほげ";
List<String>list = someMethod(hoge);

上記の使い方をする場合のジェネリクスメソッドは下記のようになっている

java
public static ArrayList<String> someMethod(String arg){
ArrayList<String> list = new ArrayList<String>();
list.add(arg);
return list;
}

複数の型パラメータを定義する

カンマ区切りで複数パラメータを指定できる

java
public static <K, V> HashMap<K, V> newHashMap(){
return new HashMap<K, V>();
}
 // ※<K,V>の型は左辺から推測してくれる
Map<String, Integer> map = newHashMap();

境界線パラメータ

< T extends クラスやインターフェース >のように書くと、
Tが指定したクラスのサブクラス(または指定したクラスそのもの)
であることを呼び出し側に要求することができる。

java
// Number型のサブクラスもしくはNumber型でのみインスタンス化できるArrayList
public class NumArrayList<T extends Number> extends ArrayList<T> {}
List<Number> numberList = new NumArrayList<Number>(); // ok
List<Double> doubleList = new NumArrayList<Double>(); // ok
List<String> stringList = new NumArrayList<String>(); // コンパイルエラー

参考

下記を参考にしました。
他にもjavaのことが詳しく書かれているのでお勧めです。

新着記事

タグ別一覧
top