今天写CRM项目时,在最后抽取BaseDao时,居然无法通过,TMD看见教程上老师也是这样写的就是没报错,我的就报错,感觉郁闷至极,错误如下:

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

  1.  
    报错代码如下:
  2.  
    @Repository(“baseDao”)
  3.  
    public class BaseDaoImpl<T> implements BaseDao<T>{
  4.  
     
  5.  
    @Resource(name=”hibernateTemplate”)
  6.  
    private HibernateTemplate hibernateTemplate;
  7.  
     
  8.  
    private Class clazz;
  9.  
    //构造方法
  10.  
    public BaseDaoImpl() {
  11.  
    //1.得到当前运行类的class对象
  12.  
    Class cs = this.getClass();
  13.  
    //2.得到运行类的父类的参数化类型
  14.  
    Type type = cs.getGenericSuperclass();
  15.  
    //把ptype转换成Type的子接口类型
  16.  
            ParameterizedType ptype=(ParameterizedType) type;
  17.  
    //3.得到实际类型参数
  18.  
    Type[] types = ptype.getActualTypeArguments();
  19.  
    //4.把types变成其实现类Class
  20.  
    Class classImpl =(Class) types[0];
  21.  
    this.clazz=classImpl;
  22.  
    }
  23.  
    }
  24.  
     
  25.  
    @Override
  26.  
    public void save(T t) {
  27.  
     
  28.  
    hibernateTemplate.save(t);
  29.  
    }
  30.  
     
  31.  
    @Override
  32.  
    public void delete(T t) {
  33.  
    hibernateTemplate.delete(t);
  34.  
    }
  35.  
     
  36.  
    @Override
  37.  
    public void update(T t) {
  38.  
    hibernateTemplate.update(t);
  39.  
     
  40.  
    }
  41.  
     
  42.  
    @Override
  43.  
    public List<T> findAll() {
  44.  
     
  45.  
    return (List<T>) hibernateTemplate.find(“select new “+clazz.getSimpleName()+”(cust_id,cust_name) from “+clazz.getSimpleName());
  46.  
    }
  47.  
     
  48.  
    @Override
  49.  
    public T findOne(int id) {
  50.  
     
  51.  
    return (T) hibernateTemplate.load(clazz, id);

}

经过网上大量搜索,几乎没有什么靠谱答案,后来我觉得既然是多态,那就先判断一下试试,哈哈哈,最后终于成功了.

下面这是经过修改后的代码,稳一笔

  1.  
    @Repository(“baseDao”)
  2.  
    public class BaseDaoImpl<T> implements BaseDao<T>{
  3.  
     
  4.  
    @Resource(name=”hibernateTemplate”)
  5.  
    private HibernateTemplate hibernateTemplate;
  6.  
     
  7.  
    private Class clazz;
  8.  
    //构造方法
  9.  
    public BaseDaoImpl() {
  10.  
    //1.得到当前运行类的class对象
  11.  
    Class cs = this.getClass();
  12.  
    //2.得到运行类的父类的参数化类型
  13.  
    Type type = cs.getGenericSuperclass();
  14.  
    //把ptype转换成Type的子接口类型
  15.  
    if (type instanceof ParameterizedType) {
  16.  
     
  17.  
    ParameterizedType ptype=(ParameterizedType) type;
  18.  
    //3.得到实际类型参数
  19.  
    Type[] types = ptype.getActualTypeArguments();
  20.  
    //4.把types变成其实现类Class
  21.  
    Class classImpl =(Class) types[0];
  22.  
    this.clazz=classImpl;
  23.  
    }
  24.  
    }
  25.  
     
  26.  
    @Override
  27.  
    public void save(T t) {
  28.  
     
  29.  
    hibernateTemplate.save(t);
  30.  
    }
  31.  
     
  32.  
    @Override
  33.  
    public void delete(T t) {
  34.  
    hibernateTemplate.delete(t);
  35.  
    }
  36.  
     
  37.  
    @Override
  38.  
    public void update(T t) {
  39.  
    hibernateTemplate.update(t);
  40.  
     
  41.  
    }
  42.  
     
  43.  
    @Override
  44.  
    public List<T> findAll() {
  45.  
     
  46.  
    return (List<T>) hibernateTemplate.find(“select new “+clazz.getSimpleName()+”(cust_id,cust_name) from “+clazz.getSimpleName());
  47.  
    }
  48.  
     
  49.  
    @Override
  50.  
    public T findOne(int id) {
  51.  
     
  52.  
    return (T) hibernateTemplate.load(clazz, id);
  53.  
    }

版权声明:本文为weolwy原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/weolwy/p/9256067.html