• 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
  • 相关阅读:
    IDEA 快捷键汇总
    Adobe推出AI音乐创作工具原型;大型语言模型对编程的影响有限?
    特殊的ip地址
    记一次 .NET 某娱乐聊天流平台 CPU 爆高分析
    kt-connect使用-k8s流量代理
    嵌入式linux系统中图片处理详解
    软件测试 - 概念篇
    vue PWA serviceWorker 有新内容时,如何自动刷新内容
    银行基于Dell EMC ECS对象存储架构的应用实践手册
    七大排序:插入排序、希尔排序、选择排序、堆排序、冒泡排序、快速排序、归并排序
  • 原文地址:https://blog.csdn.net/qq_25073223/article/details/126673061