Java の Generics に関して、ほんのチョットだけコード量が減る書き方を紹介。
前回出てきた ConvertUtils.convert() メソッドのように、「返り値のオブジェクトの型を指定する class オブジェクトをメソッドの引数として渡す」場合に使える方法です。
新しいユーティリティ・クラス MyConvertUtils の static メソッド convert() を以下のように、ジェネリックなメソッドとして定義します(別に static メソッドである必要はありませんが):
public final class MyConvertUtils{ private MyConvertUtils(){} public static <E> E convert(String s, Class<E> type){ // 例えばこんな実装 return type.cast(ConvertUtils.convert(s, type)); // もしくは // return (E)ConvertUtils.convert(s, type); } }
メソッドをこのように実装しておくと、呼び出し側では次のようにキャストの手間を省くことができます:
/* メソッド内 */ // キャストの手間を省ける Integer i = MyConvertUtils.convert("123", Integer.class); // c.f. 普通の ConvertUtils.convert() を使うと Integer i2 = (Integer)ConvertUtils.convert("123", Integer.class);
ちなみに、DI コンテナでオブジェクトを取得する際にも、このようなメソッド宣言が使えます。