• java使用反射获取泛型运行时的类


    转自:

    java使用反射获取泛型运行时的类

    下文讲述java代码在运行时,使用反射获取其泛型类型的方法分享,如下所示:

    泛型常用于以下两个场景: 1.参数化泛型 2.参数化类

    泛型方法返回类型

    public class MyClass {
      protected List stringList = ...;
      public List getStringList(){
        return this.stringList;
      }
    }
    
    //使用发射
    Method method = MyClass.class.getMethod("getStringList", null);
    
    Type returnType = method.getGenericReturnType();
    if(returnType instanceof ParameterizedType){
        ParameterizedType type = (ParameterizedType) returnType;
        Type[] typeArguments = type.getActualTypeArguments();
        for(Type typeArgument : typeArguments){
            Class typeArgClass = (Class) typeArgument;
            System.out.println("typeArgClass = " + typeArgClass);
        }
    }
    -----------运行以上代码,将输出以下信息-----
    typeArgClass = java.lang.String
    

    泛型方法参数类型

    public class MyClass {
      protected List stringList = ...;
      public void setStringList(List list){
        this.stringList = list;
      }
    }
    
    method = Myclass.class.getMethod("setStringList", List.class);
    Type[] genericParameterTypes = method.getGenericParameterTypes();
    for(Type genericParameterType : genericParameterTypes){
        if(genericParameterType instanceof ParameterizedType){
            ParameterizedType aType = (ParameterizedType) genericParameterType;
            Type[] parameterArgTypes = aType.getActualTypeArguments();
            for(Type parameterArgType : parameterArgTypes){
                Class parameterArgClass = (Class) parameterArgType;
                System.out.println("parameterArgClass = " + parameterArgClass);
            }
        }
    }
    ------运行以上代码,将输出以下信息----
    parameterArgType = java.lang.String
    

    泛型变量类型

    public class MyClass {
      public List stringList = ...;
    }
     
    Field field = MyClass.class.getField("stringList");
    Type genericFieldType = field.getGenericType();
    if(genericFieldType instanceof ParameterizedType){
        ParameterizedType aType = (ParameterizedType) genericFieldType;
        Type[] fieldArgTypes = aType.getActualTypeArguments();
        for(Type fieldArgType : fieldArgTypes){
            Class fieldArgClass = (Class) fieldArgType;
            System.out.println("fieldArgClass = " + fieldArgClass);
        }
    }
    --------运行以上代码,将输出以下信息-----
    fieldArgClass = java.lang.String
  • 相关阅读:
    全网最全JAVA面试八股文
    机器学习概论
    「前端+鸿蒙」核心技术HTML5+CSS3(九)
    【校招VIP】java语言考点之垃圾回收算法
    SQL Server 数据库创建与删除
    Redis 搭建高可用集群
    IP和MAC的作用区别
    力扣(LeetCode)878. 第 N 个神奇数字(C++)
    【端午安康,给大家讲个“网络”故事,深刻一下!】
    HTML+CSS大作业:众志成城 抗击疫情 抗击疫情网页制作作业 疫情防控网页设计
  • 原文地址:https://blog.csdn.net/qq_25073223/article/details/126673061