获取泛形的类型

如果你拿到了一个方法的返回值的类型,或者是一个字段的类型,但是它是一个泛形。

其实通过java的反射机制,是可以很简单的拿到方法的类型的

Method method = .....
Class<?> returnType = method.getReturnType();
String name = returnType.getName();

但是这样只能拿到方法返回值本身的类型,如何拿到泛形呢?

   Method method = ....;
  Type genericReturnType = method.getGenericReturnType();
   System.out.println(genericReturnType);
        
   if(genericReturnType instanceof ParameterizedType){
        //通过这一步,判断是否是泛形参数的类型
        ParameterizedType tt = (ParameterizedType) genericReturnType;
        //这个就是泛型参数,如果没有带泛形,打印出来的就是 返回值本身
        Type[] actualTypeArguments = tt.getActualTypeArguments();
        //为什么会是一个数组呢?原因是Map<String,Object>是有两个,List<String>只有一个,
        for(Type t : actualTypeArguments){
        if(t instanceof ParameterizedType){
        
          ...任何一个Type都有可能是泛形,如果是泛形,则需要重新走上面的
getActualTypeArguments()
        }
         if(t instanceof Class){
          
          //拿到真实的Class了
          System.out.println(t);
        }
              
         }
    }
原文地址:https://www.cnblogs.com/zhuxiaojie/p/5464504.html