倭マン's BLOG

くだらない日々の日記書いてます。 たまにプログラミング関連の記事書いてます。 書いてます。

Generics プログラミング・チップス

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 コンテナでオブジェクトを取得する際にも、このようなメソッド宣言が使えます。