ksino's diary

覚えたことを忘れないように、小さなことでも書いていく。

型パラメータを取得する

やりたいこと

Genericsで以下のような型パラメータが指定されていた場合、型パラメータに指定されたクラス名(jp.gr.java_conf.ksino.generics.ABean)を取得したい。

public class CBean {
    private List<jp.gr.java_conf.ksino.generics.ABean> aBeans;

実装

ParameterizedTypeで取れます。

import java.lang.reflect.Field;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;

public class ParameterizedTypeTest {
    public static void main(String[] args) {
        try {
            Field field = CBean.class.getDeclaredField("aBeans");
            ParameterizedType pType = (ParameterizedType)field.getGenericType();
            Type[] typeArgs = pType.getActualTypeArguments();
            if (typeArgs.length > 0) {
                System.out.println(typeArgs[0].getTypeName());
            }

実行結果

jp.gr.java_conf.ksino.generics.ABean