java.lang.Class cannot be cast to java.lang.reflect.ParameterizedType
在网上找了一个hibernate通用dao泛型接口代码:
public interface GenericDao<T> {
void create(T entity);
void delete(T entity);
}
实现类:
package com.dao;
import java.io.Serializable;
import java.lang.reflect.ParameterizedType;
import java.util.List;
import org.hibernate.criterion.Projections;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
public class GenericHibernateDaoImpl<T> extends HibernateDaoSupport implements
GenericDao<T> {
private Class<T> clazz;
@SuppressWarnings("unchecked")
public GenericHibernateDaoImpl() {
// 通过反射获取T的类型信息实例
this.clazz = (Class<T>) ((ParameterizedType) this.getClass()
.getGenericSuperclass
()).getActualTypeArguments()[0];
}
public void create(T entity) {
super.getSession().save(entity);
}
public void delete(T entity) {
super.getSession().delete(entity);
}.....
结果启动tomcat服务器的时候报java.lang.Class cannot be cast to java.lang.reflect.ParameterizedType错误,什么问题?求解决。。。。。
[解决办法]
不用这样实现泛型,
你把泛型写在方法上就好了
如
- Java code
/** * */package com.zuxiang.annotationtest;import java.io.Serializable;import java.util.List;/** * @author zuxiang * */public class Dao { public <T> void delete(Serializable entityId){ } public <T> void update(T entity){ } public <T> void save(T entity){ } public <T> T find(Serializable entityId){ return t; } }
[解决办法]
[解决办法]
泛型不能这么用
你不能在运行时才去获取泛型的类型
也就是说,必须在编译器就明确这个泛型对象
public class GenericHibernateDaoImpl<T> extends HibernateDaoSupport implements
GenericDao<T>
按照这个类的定义来说,我觉得给类加上abstract比较好,不会让人产生歧义
getActualTypeArguments需要用这个函数的话,你的类就应该已经被指定了泛型类型
例如 public class MyDaoImpl<MyPOJO>
[解决办法]
[解决办法]
public interface GenericDao{
void create(Class<T> entity);
void delete(Class<T> entity);
}
把泛型定义在方法上就不会了!