类型转换错误解决方案reflect.ParameterizedType
今天写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);
-
}
版权声明:本文为weolwy原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。