【Java】総称型で定義されたフィールドの型パラメータを取得する

どうしても型パラメータを取得したい。 - いまいにっき

    class TestBean1 {
    }

    class TestBean2 {
        List<TestBean1> list1;
    }

list1のクラス(List)の型パラメータとして与えられた型(TestBean1)の情報を取得したい。

 

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

 

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

package aaa;
import java.lang.reflect.Field;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.List;

import org.junit.Test;

public class GetGenericsTest {
    @Test
    public void test() throws SecurityException, NoSuchFieldException {
        Field field2 = TestBean2.class.getDeclaredField("list1");
        ParameterizedType typeField2 =
            (ParameterizedType)field2.getGenericType();
        Type[] typeArgs = typeField2.getActualTypeArguments();
        for(int i=0; i<typeArgs.length; i++) {
            Class<?> clazz = (Class<?>)typeArgs[i];
            System.out.println(clazz.getName());
        }
    }

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

 

Typeインターフェースとか初めて見ました。 

Java1.5以降のリフレクションはあまり触ったことがなかったので知らないことがたくさんです。 

総称型とかアノテーションが導入されてからClassクラスはめちゃくちゃ複雑になったような気がします。

今度ゆっくり調べてみよう。

 

Trackback URL for this post:

http://blog.smartnetwork.co.jp/staff/trackback/49