このメソッドの宣言の意味がわかりません。 public static
http://toro.2ch.net/test/read.cgi/tech/1361516065/99List simpleFind(String sql, ResultSetBeanMapping mapping) throws SQLException { 型Tのマップを受け取って型Tの要素が入ったリストが返されているのであろうというのは 何となくわかります。 しかし、返値の前にさらに をつけているのは何なのかわかりません。 あと、メソッドの中で T bean = mapping.createFromResultSet(rs); とあるのですが、メソッドの中での型宣言のときは ではなくTでよいのでしょうか?
メソッドのパラメータ化
さて、次はメソッドの方です。クラスがパラメータ化されていなくても、メソッドだけをパラメータ化することができます。
メソッドをパラメータ化するには public や private や static などの後、戻り値の前に <パラメータ名> を記述します。 クラスの場合はクラス名の後だったのに対し、メソッドではメソッド名の前になります。
次の例は java.util.Collections クラスの fill メソッドの定義です。
public static
boolean replaceAll(List list, T oldVal, T newVal);
T がパラメータとなる型です。メソッドの中では T は普通の型のように使えるのはクラスのときと同様です。java.util.Collections クラスや java.util.Arrays クラスのように static メソッドばかりのクラスはインスタン化しないので、このようにメソッドをパラメータ化することが多いようです。
先ほどと同様にワイルドカードを用いることもできます。次の例は同じく Collections クラスの copy メソッドです。
public static
void copy(List dest, List src);
T の派生クラスは T のスーパクラスにはコピーできるということです。単なるワイルドカードも使えます。この場合はどんなクラスでもいいので、戻り値の前のパラメータ表記は必要ありません。
ワイルドカードの例として Collections クラスの reverse メソッドです。リストの並び順を変えるだけなので、List の要素はどんなクラスのオブジェクトでもいいわけです。
public static void reverse(List list);
http://www.javainthebox.net/laboratory/J2SE1.5/LangSpec/Generics/Generics.html
メソッドだけをパラメータ化することはあまりないかもしれませんが、static メソッドだけのユーティリティクラスなどで重宝しそうです。
メソッドの総称型 メソッドのみに総称型を適用した定義を行うことも出来る。[2007-06-12] 戻り値の型の直前に「<仮型引数, 仮型引数…>」を置くだけ。後はクラスの場合と同様。
http://www.ne.jp/asahi/hishidama/home/tech/java/generics.html
すなわち、メソッドでジェネリクスを使うときには初めに
ちなみに総称型というらしい。