java.lang.ClassCastException: java.lang.Class cannot be cast to java.lang.reflect.ParameterizedType

获取泛型参数的类型
         Class < T entityClass  =  (Class < T > )((ParameterizedType)getClass().getGenericSuperclass()).getActualTypeArguments()[ 0 ];

出现:
java.lang.ClassCastException: java.lang.Class cannot be cast to java.lang.reflect.ParameterizedType

使用以下工具类方法获取~
 1  package  cn.pconline.prolib.util;
 2  import  java.lang.reflect.ParameterizedType;  
 3  import  java.lang.reflect.Type;  
 4    
 5  public   class  GenericsUtils {  
 6       /**    
 7       * 通过反射,获得定义Class时声明的父类的范型参数的类型.   
 8       * 如public BookManager extends GenricManager<Book>   
 9       *   
10       *  @param  clazz The class to introspect   
11       *  @return  the first generic declaration, or <code>Object.class</code> if cannot be determined   
12        */   
13       public   static  Class getSuperClassGenricType(Class clazz) {  
14           return  getSuperClassGenricType(clazz,  0 );  
15      }  
16    
17       /**    
18       * 通过反射,获得定义Class时声明的父类的范型参数的类型.   
19       * 如public BookManager extends GenricManager<Book>   
20       *   
21       *  @param  clazz clazz The class to introspect   
22       *  @param  index the Index of the generic ddeclaration,start from 0.   
23        */   
24       public   static  Class getSuperClassGenricType(Class clazz,  int  index)  throws  IndexOutOfBoundsException {  
25    
26          Type genType  =  clazz.getGenericSuperclass();  
27    
28           if  ( ! (genType  instanceof  ParameterizedType)) {  
29               return  Object. class ;  
30          }  
31    
32          Type[] params  =  ((ParameterizedType) genType).getActualTypeArguments();  
33    
34           if  (index  >=  params.length  ||  index  <   0 ) {  
35               return  Object. class ;  
36          }  
37           if  ( ! (params[index]  instanceof  Class)) {  
38               return  Object. class ;  
39          }  
40           return  (Class) params[index];  
41      }  
42  }  

         Class < T entityClass  =  GenericsUtils.getSuperClassGenricType(BasicService. class 0 );
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值