获取泛型的类型
  J0tQqlYbt0QD 2023年11月02日 76 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]);
    }
}
【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  2Vtxr3XfwhHq   2024年05月17日   46   0   0 Java
  8s1LUHPryisj   2024年05月17日   42   0   0 Java
  aRSRdgycpgWt   2024年05月17日   44   0   0 Java
J0tQqlYbt0QD