たかふーのブログ このページをアンテナに追加 RSSフィード Twitter

2010-01-11

どうしても型パラメータを取得したい。

こうすれば、取れない事もないのではないかと。。。


public class GetGenericsTest {

    @Test
    public void test() throws SecurityException, NoSuchFieldException,
            ClassNotFoundException {
        // 通常
        Field field1 = TestBean1.class.getDeclaredField("value");
        System.out.println(field1.getName() + "::" + field1.getType().getName());
        Field field2 = TestBean2.class.getDeclaredField("list1");
        System.out.println(field2.getName() + "::" + field2.getType().getName());
        // ごりおし
        String string = field2.getGenericType().toString();
        string = string.replaceAll("^.*\\<", "").replaceAll(">.*", "");
        Class<?> clazz = Class.forName(string);
        System.out.println(clazz.getName());
    }

    public static class TestBean1 {
        String value;
    }

    public static class TestBean2 {
        List<TestBean1> list1;
    }

}

結果。

value::java.lang.String
list::java.util.List
imai78.GetGenericsTest$TestBean1

やっぱり何か違うかなあ。


追記

気になったので調べてみました。


以下のような感じで取得できます。

404 Not Found

というトラックバックを頂きました!早速書きなおしますと、、、

    @Test
    public void test2() throws SecurityException, NoSuchFieldException {
        Field field2 = TestBean2.class.getDeclaredField("list1");
        ParameterizedType paramType = (ParameterizedType) field2.getGenericType();
        Type[] types = paramType.getActualTypeArguments();
        for (Type type : types) {
            Class<?> clz = (Class<?>) type;
            System.out.println("type=" + clz.getName());
        }
    }

ナルホド、こっちの方が激しくスマートな感じがします><

skimuraskimura 2010/01/12 09:45 http://code.google.com/p/janerics/
もよろしくー

imai78imai78 2010/01/12 13:41 >きむきむさん

おす、チェックアウトして勉強させて頂きます><

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証