0
点赞
收藏
分享

微信扫一扫

获取泛型的类型

示例一:获取父类的泛型的类型

public class Emp<T, Q> {
    class Stu extends Emp<String, Integer> {
    }

    @Test
    void fun() {
        final Type type = Emp.class.getGenericSuperclass();
        final ParameterizedType parameterizedType = (ParameterizedType) type;
        System.out.println(parameterizedType.getActualTypeArguments()[0]);
        System.out.println(parameterizedType.getActualTypeArguments()[1]);
    }
}

示例二:获取成员变量的泛型类型

public class Emp<T, Q> {
    private static Emp<String, Integer> emp = new Emp<>();
    public static void main(String[] args) throws Exception {
        //通过反射获取student属性
        Field field = Emp.class.getDeclaredField("emp");
        //通过属性获取泛型
        Type genericType = field.getGenericType();
        System.out.println(genericType);

        // ParameterizedType表示的是带泛型的类型
        ParameterizedType pt = (ParameterizedType) genericType;
        // 获取具体的泛型类型,这个方法会返回一个Type的数组
        Type[] actualTypeArguments = pt.getActualTypeArguments();
        System.out.println(actualTypeArguments[0]);
        System.out.println(actualTypeArguments[1]);
    }
}

示例三:获取局部变量的泛型的类型

public class Emp<T, Q> {
    public static void main(String[] args) throws Exception {
        //注意:泛型对象必须以匿名内部类的方式定义
Emp<String, Integer> emp = new Emp<>() { //匿名内部类
        };
        final Type type = emp.getClass().getGenericSuperclass();

        ParameterizedType parameterizedType = (ParameterizedType) type;
        final Type[] types = parameterizedType.getActualTypeArguments();
        System.out.println(types[0]);
        System.out.println(types[1]);
    }
}
举报

相关推荐

0 条评论