JavaでList・Set・Map等の総称型で定義されたフィールドの型パラメータを取得するには
import java.util.List; import java.util.Map; import java.util.Set; public class Test { private List<String> list; private Set<Integer> set; private Map<String, Long> map; }
このクラスのフィールドlist, set, mapの型パラメータを、このクラスのインスタンスを介さずに取得したい。具体的にはlistとsetについては格納できる値の型を、mapについてはキーと値の型を取得したい。次のようにするとこういうことが可能になります。
import java.lang.reflect.ParameterizedType; ParameterizedType listPt = (ParameterizedType) Test.class.getDeclaredField("list").getGenericType(); System.out.printf("list: %s\n", listPt.getActualTypeArguments()[0].toString()); ParameterizedType setPt = (ParameterizedType) Test.class.getDeclaredField("set").getGenericType(); System.out.printf("set: %s\n", setPt.getActualTypeArguments()[0].toString()); ParameterizedType mapPt = (ParameterizedType) Test.class.getDeclaredField("map").getGenericType(); System.out.printf("map: %s, %s\n", mapPt.getActualTypeArguments()[0].toString(), mapPt.getActualTypeArguments()[1].toString());
出力結果は次のようになります。
list: class java.lang.Integer set: class java.lang.String map: class java.lang.String, class java.lang.Long