开发者社区> 问答> 正文

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

比如:

接口:

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

public abstract class AbstractStringConverter implements Converter{
}

真正实现类:

public class ClobStringConverter extends AbstractStringConverter{
}

需求是:

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

获得Class<Clob>



稍微思考了一下,发现有很多需要判断跟匹配的地方

展开
收起
小旋风柴进 2016-03-03 17:12:11 3036 0
1 条回答
写回答
取消 提交回答
  • 最简单的一种:

        /**
    
         *  @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

    2019-07-17 18:51:42
    赞同 展开评论 打赏
问答分类:
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
Spring Cloud Alibaba - 重新定义 Java Cloud-Native 立即下载
The Reactive Cloud Native Arch 立即下载
JAVA开发手册1.5.0 立即下载