Open2

Javaのジェネリクス(総称型)についての備忘録

ゆるふうぇいとゆるふうぇいと

クラス総称型とメソッド総称型

クラスとメソッドで書き方が微妙に変わるので混乱しないように。

クラス総称型の書き方

クラス名の直後に仮型引数を記述
public class クラス名<仮型引数 …>

public class GenericSample<T>{
    …
}

メソッド総省型の書き方

戻り値の型の直前に仮型引数を記述する
public <仮型引数> 戻り値の型 メソッド名・・・

    public static <T> T Hoge(T t1){
        T result;

        return result;
    }
ゆるふうぇいとゆるふうぇいと

制約を付ける

Hogehgoeクラスを継承しているものだけ、とか。
書き方
<仮型引数 extends クラスA>

クラス

// Numberのサブクラスのみ割り当て可能
public class GenericSample<E extends Number> {

}

public class GenericTest {
    public static void main(String[] args){
//      OK IntegerはNumberのサブクラス
        GenericSample<Integer> integerList = new GenericSample<>();

//      NG StringはNumberのサブクラスじゃない
//      GenericSample<String> taskStack = new GenericSample<>(); 
    }
}

メソッド

    public static <T extends Number> boolean test(T t1,T t2){
        return t1.intValue() < t2.intValue();
    }

    public static void main(String[] args){
        // OK
        test(1,2);

        // NG
        // test("hoge","fuga");
    }