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

java-教程王 Java教程 发布时间:2021-10-14 22:01:38 阅读数:1744 1
下文讲述java代码在运行时,使用反射获取其泛型类型的方法分享,如下所示:
泛型常用于以下两个场景: 1.参数化泛型 2.参数化类

泛型方法返回类型

public class MyClass {
  protected list<String> stringList = ...;
  public List<String> 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<String> stringList = ...;
  public void setStringList(List<String> 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<String> 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
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

本文链接: https://www.Java265.com/JavaCourse/202110/1463.html

最近发表

热门文章

好文推荐

Java265.com

https://www.java265.com

站长统计|粤ICP备14097017号-3

Powered By Java265.com信息维护小组

使用手机扫描二维码

关注我们看更多资讯

java爱好者