关于Java反射获取类上面的泛型,-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文

关于Java反射获取类上面的泛型,

小旋风柴进 2016-03-03 17:12:11 1527

比如:

接口:

public interface Converter<O,T> {
}```
抽象父类:

public abstract class AbstractStringConverter implements Converter{
}

真正实现类:

public class ClobStringConverter extends AbstractStringConverter{
}

需求是:

传入参数:ClobStringConverter.class,Converter.class,0

获得Class<Clob>



稍微思考了一下,发现有很多需要判断跟匹配的地方
Java
分享到
取消 提交回答
全部回答(1)
  • 小旋风柴进
    2019-07-17 18:51:42

    最简单的一种:

        /**
    
         *  @param  index  -- 表示要拿泛型列表中的第几个,通常是 0,也就是第一个
    
         */
    
        public static Class getSuperClassGenricType(final Class clazz, final int index) {
    
            Type genType = clazz.getGenericSuperclass();
    
            if (!(genType instanceof ParameterizedType)) {
                return Object.class;
            }
    
            Type[] params = ((ParameterizedType) genType).getActualTypeArguments();
    
            if (index >= params.length || index < 0) {
                return Object.class;
            }
            if (!(params[index] instanceof Class)) {
                return Object.class;
            }
    
            return (Class) params[index];
        }

    如果要复杂并且全面的方法,可以到 Spring 的源码中找。。好象是 GenericTypeResolver.java

    0 0
开发与运维
使用钉钉扫一扫加入圈子
+ 订阅

集结各类场景实战经验,助你开发运维畅行无忧

推荐文章
相似问题
推荐课程