您的位置:首页 > 其它

获取泛形的类型

2016-05-06 09:44 302 查看
如果你拿到了一个方法的返回值的类型,或者是一个字段的类型,但是它是一个泛形。

其实通过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);

        }

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: