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

ここまでお読みいただき、誠にありがとうございます。SNS 等でこの記事をシェアしていただけますと、大変励みになります。どうぞよろしくお願いします。

© 2024 Java 入門