`
xuji
  • 浏览: 11271 次
社区版块
存档分类
最新评论

java 反射 如何获得子类继承的父类泛型参数

阅读更多
   废话不多说,把下面这个方法跑一下,就OK了,参数是子类Class,返回值是子类继承父类时给父类传入的泛型参数,该方法假定父类只有一个泛型参数,否则抛出异常。
   public static Class getGenericSuperclassBounds(Class childClass){
Type type = childClass.getGenericSuperclass();
while(!(type instanceof Class)){
if(type instanceof WildcardType){
type = ((WildcardType)type).getUpperBounds()[0];
}
else if(type instanceof TypeVariable<?>){
type = ((TypeVariable<?>)type).getBounds()[0];
}
else if(type instanceof ParameterizedType){
ParameterizedType ptype = (ParameterizedType)type;
Type[] types = ptype.getActualTypeArguments();
if(types==null||types.length==0){
return Object.class;
}
if(types.length>1){
throw new RuntimeException(childClass.getName()+"继承的泛型"+ptype+"的实参数量多于1个");
}
type = ptype.getActualTypeArguments()[0];
}
else if(type instanceof GenericArrayType ){
type = ((GenericArrayType)type).getGenericComponentType();
}
}
return (Class)type;
}
0
0
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics