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");
}