Java のジェネリックスメソッド定義
ジェネリックスではメソッドをどのように定義するでしょうか。
次の例をみてください。
public class Box<T> { //... public static <T> T getMiddle(T[] a){ return a[a.length/2]; } }
getMiddle というメソッドでは、型 T の配列を受け取り、その配列の真ん中の (もちろんこれも型は T である) 要素を返しています。
この型が String であろうと、Integer であろうと同様の動作をし、かつ戻り値の型が引数の型によって変わるので、ジェネリックスを用いて実装されています。
さて、このときの書き方は次のようになります。
public static <T> T getMiddle(T[] a){ return a[a.length/2]; }
ここでは static メソッドなので static は必要ではありません。 T の指定の仕方に着目してください。
この様に定義することで、これを使う側は次のように呼び出すことができます。
String[] cars = {"Toyota", "Nissan", "Honda"}; System.out.println(Box.<String>getMiddle(cars));
実行結果は次の通りです。
Nissan
またこのとき、文字列の配列を渡しており型が分かるのでメソッド名の前につく型は省略できます。次のコードは上のコードとまったく同様です。
String[] cars = {"Toyota", "Nissan", "Honda"}; System.out.println(Box.getMiddle(cars));