標籤:ict 大神 ack cas 問題解決 環境 div 3.1 length
最近開始著手做一個項目,項目環境用的是spring4.2,struts2.3.1,hibernate4.3.0....一切都配置正常,所有的POJO類都布置好。service層和dao層也抽取了,可是在測試的時候,竟然報以一個錯誤 ,java.lang.ClassCastException: java.lang.Class cannot be cast to java.lang.reflect.ParameterizedType,,,調試了好久,都沒有找出方法,後來看了woshisap大神的部落格再把問題解決,故貼上大神的代碼 :
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);
Exception:java.lang.ClassCastException: java.lang.Class cannot be cast to java.lang.reflect.ParameterizedType