伍佰目录 短网址
  当前位置:海洋目录网 » 站长资讯 » 站长资讯 » 文章详细 订阅RssFeed

Spring 中优雅的获取泛型信息

来源:本站原创 浏览:126次 时间:2022-10-14
简介

Spring 源码是个大宝库,我们能遇到的大部分工具在源码里都能找到,所以笔者开源的 mica[1] 完全基于 Spring 进行基础增强,不重复造轮子。今天我要分享的是在 Spring 中优雅的获取泛型。

获取泛型自己解析

我们之前的处理方式,代码来源 vjtools(江南白衣)。





































/** * 通过反射, 获得Class定义中声明的父类的泛型参数的类型. *  * 注意泛型必须定义在父类处. 这是唯一可以通过反射从泛型获得Class实例的地方. *  * 如无法找到, 返回Object.class. *  * 如public UserDao extends HibernateDao<User,Long> *  * @param clazz clazz The class to introspect * @param index the Index of the generic declaration, start from 0. * @return the index generic declaration, or Object.class if cannot be determined */public static Class getClassGenericType(final Class clazz, final int index) {
   Type genType = clazz.getGenericSuperclass();
   if (!(genType instanceof ParameterizedType)) {        logger.warn(clazz.getSimpleName() + "'s superclass not ParameterizedType");        return Object.class;    }
   Type[] params = ((ParameterizedType) genType).getActualTypeArguments();
   if ((index >= params.length) || (index < 0)) {        logger.warn("Index: " + index + ", Size of " + clazz.getSimpleName() + "'s Parameterized Type: "                + params.length);        return Object.class;    }    if (!(params[index] instanceof Class)) {        logger.warn(clazz.getSimpleName() + " not set the actual class on superclass generic parameter");        return Object.class;    }
   return (Class) params[index];}
ResolvableType 工具

从 Spring 4.0 开始 Spring 中添加了 ResolvableType 工具,这个类可以更加方便的用来回去泛型信息。 首先我们来看看官方示例:












private HashMap<Integer, List<String>> myMap;
public void example() {    ResolvableType t = ResolvableType.forField(getClass().getDeclaredField("myMap"));    t.getSuperType(); // AbstractMap<Integer, List<String>>    t.asMap(); // Map<Integer, List<String>>    t.getGeneric(0).resolve(); // Integer    t.getGeneric(1).resolve(); // List    t.getGeneric(1); // List<String>    t.resolveGeneric(1, 0); // String}
详细说明构造获取 Field 的泛型信息


ResolvableType.forField(Field)
构造获取 Method 的泛型信息


ResolvableType.forMethodParameter(Method, int)
构造获取方法返回参数的泛型信息


ResolvableType.forMethodReturnType(Method)
构造获取构造参数的泛型信息


ResolvableType.forConstructorParameter(Constructor, int)
构造获取类的泛型信息


ResolvableType.forClass(Class)
构造获取类型的泛型信息


ResolvableType.forType(Type)
构造获取实例的泛型信息


ResolvableType.forInstance(Object)

  推荐站点

  • At-lib分类目录At-lib分类目录

    At-lib网站分类目录汇集全国所有高质量网站,是中国权威的中文网站分类目录,给站长提供免费网址目录提交收录和推荐最新最全的优秀网站大全是名站导航之家

    www.at-lib.cn
  • 中国链接目录中国链接目录

    中国链接目录简称链接目录,是收录优秀网站和淘宝网店的网站分类目录,为您提供优质的网址导航服务,也是网店进行收录推广,站长免费推广网站、加快百度收录、增加友情链接和网站外链的平台。

    www.cnlink.org
  • 35目录网35目录网

    35目录免费收录各类优秀网站,全力打造互动式网站目录,提供网站分类目录检索,关键字搜索功能。欢迎您向35目录推荐、提交优秀网站。

    www.35mulu.com
  • 就要爱网站目录就要爱网站目录

    就要爱网站目录,按主题和类别列出网站。所有提交的网站都经过人工审查,确保质量和无垃圾邮件的结果。

    www.912219.com
  • 伍佰目录伍佰目录

    伍佰网站目录免费收录各类优秀网站,全力打造互动式网站目录,提供网站分类目录检索,关键字搜索功能。欢迎您向伍佰目录推荐、提交优秀网站。

    www.wbwb.net