今天写CRM项目时,在最后抽取BaseDao时,居然无法通过,TMD看见教程上老师也是这样写的就是没报错,我的就报错,感觉郁闷至极,错误如下:
java.lang.Class cannot be cast to java.lang.reflect.ParameterizedType
报错代码如下: @Repository("baseDao") public class BaseDaoImpl<T> implements BaseDao<T>{ @Resource(name="hibernateTemplate") private HibernateTemplate hibernateTemplate; private Class clazz; //构造方法 public BaseDaoImpl() { //1.得到当前运行类的class对象 Class cs = this.getClass(); //2.得到运行类的父类的参数化类型 Type type = cs.getGenericSuperclass(); //把ptype转换成Type的子接口类型 ParameterizedType ptype=(ParameterizedType) type; //3.得到实际类型参数 Type[] types = ptype.getActualTypeArguments(); //4.把types变成其实现类Class Class classImpl =(Class) types[0]; this.clazz=classImpl; } } @Override public void save(T t) { hibernateTemplate.save(t); } @Override public void delete(T t) { hibernateTemplate.delete(t); } @Override public void update(T t) { hibernateTemplate.update(t); } @Override public List<T> findAll() { return (List<T>) hibernateTemplate.find("select new "+clazz.getSimpleName()+"(cust_id,cust_name) from "+clazz.getSimpleName()); } @Override public T findOne(int id) { return (T) hibernateTemplate.load(clazz, id);
经过网上大量搜索,几乎没有什么靠谱答案,后来我觉得既然是多态,那就先判断一下试试,哈哈哈,最后终于成功了.
下面这是经过修改后的代码,稳一笔
@Repository("baseDao") public class BaseDaoImpl<T> implements BaseDao<T>{ @Resource(name="hibernateTemplate") private HibernateTemplate hibernateTemplate; private Class clazz; //构造方法 public BaseDaoImpl() { //1.得到当前运行类的class对象 Class cs = this.getClass(); //2.得到运行类的父类的参数化类型 Type type = cs.getGenericSuperclass(); //把ptype转换成Type的子接口类型 if (type instanceof ParameterizedType) { ParameterizedType ptype=(ParameterizedType) type; //3.得到实际类型参数 Type[] types = ptype.getActualTypeArguments(); //4.把types变成其实现类Class Class classImpl =(Class) types[0]; this.clazz=classImpl; } } @Override public void save(T t) { hibernateTemplate.save(t); } @Override public void delete(T t) { hibernateTemplate.delete(t); } @Override public void update(T t) { hibernateTemplate.update(t); } @Override public List<T> findAll() { return (List<T>) hibernateTemplate.find("select new "+clazz.getSimpleName()+"(cust_id,cust_name) from "+clazz.getSimpleName()); } @Override public T findOne(int id) { return (T) hibernateTemplate.load(clazz, id); }
原文地址:https://www.cnblogs.com/weolwy/p/9256067.html
时间: 2024-10-11 19:18:23