Exception:java.lang.ClassCastException: java.lang.Class cannot be cast to java.lang.reflect.Paramete
Posted 那爱多情
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Exception:java.lang.ClassCastException: java.lang.Class cannot be cast to java.lang.reflect.Paramete相关的知识,希望对你有一定的参考价值。
最近开始着手做一个项目,项目环境用的是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.Paramete的主要内容,如果未能解决你的问题,请参考以下文章