zoukankan      html  css  js  c++  java
  • Exception:java.lang.ClassCastException: java.lang.Class cannot be cast to java.lang.reflect.ParameterizedType

    最近开始着手做一个项目,项目环境用的是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);

  • 相关阅读:
    Scala程序设计(第2版)
    会声会影X6 DV影片制作--编辑--刻盘实战从入门到精通
    Perl进阶(第2版)
    网络知识与应用
    「C」 函数、运算、流程控制
    OC中属性readwrite,readonly,assign,retain,copy,nonatomic 各是什么作用,在那种情况下用?
    OC-nonatomic和atomic相关
    C++之类与对象(1)
    C++对C语言的非面向对象特性扩充(3)
    C++对C语言的非面向对象特性扩充(2)
  • 原文地址:https://www.cnblogs.com/sirab415/p/6133533.html
Copyright © 2011-2022 走看看