问题的关键:clazz其实应该是T.class,clazz该如何获取???
public abstract class BaseDaoImpl<T> implements BaseDao<T>{
private SessionFactory sessionFactory ;
//比如Class<User> clazz ,那么clazz就应该代表User.class
private Class<T> clazz ; //clazz表示该类的子类传递给父类泛型上的类型,即T.class ,我需要在父类上获取父类泛型的具体类型,通过反射
protected BaseDaoImpl(){
//由于BaseDaoImpls是抽象类,不能实例化,所以this表示子类的实例,那么我就可以利用this来获取父类(BaseDaoImpl)上的泛型的具体类型
//getGenericSuperclass()方法:获取父类的泛型,返回值是Type类型,Type是Class类的接口,ParameterizedType类用于描述泛型的类,它是jdk升级后新添加的类,专门用来描述泛型
ParameterizedType pt = (ParameterizedType) this.getClass().getGenericSuperclass();
//getActualTypeArguments()方法:获取泛型的真实类型,返回值是Type[]
clazz = (Class<T>) pt.getActualTypeArguments()[0] ;
}
public void setSessionFactory(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
}
public Session getSession(){
return sessionFactory.getCurrentSession() ;
}
public void save(T entity){
this.getSession().save(entity) ;
} ;
public void update(T entity){
this.getSession().update(entity) ;
} ;
public void delete(Long id){
Object obj = this.getSession().get(clazz, id) ;
this.getSession().delete(obj) ;
} ;
public T getById(Long id){
return (T) this.getSession().get(clazz, id) ; //因为Seesion的get方法需要clazz是个Class类型,而且还必须是T.class,所以我要在上面极力获取到T.class
} ;
}
相关推荐
一个泛型子类继承一个泛型父类时,子类泛型参数传值给父类泛型参数 Son--Father 4; 定义子类时子类泛型参数给定占位符,同时父类泛型参数可以赋值 public class Son,Y>:Father,string> 5:一个泛型子类继承一个...
Java 运行时如何获取泛型参数的类型 Java类型Type 之 ParameterizedType,GenericArrayType,TypeVariabl,WildcardType 从实现的接口获取泛型参数 定义一个泛型父类: public interface SuperClass { String ...
654.652.JAVA基础教程_反射-获取运行时类的父类及父类的泛型(654).rar
介绍获取方法的参数和返回值类型(包括Type和Class)获取泛型参数类型(包括对象的泛型参数或集合元素的泛型类型)方法首先我们定义一个类:public cla
java 泛型类的类型识别示例 java 泛型类的类型识别示例 java 泛型类的类型识别示例
主要介绍了Java 获取泛型的类型实现代码的相关资料,需要的朋友可以参考下
通过反射获得指定类的父类的泛型参数的实际类型
泛型:就是在定义类,接口时指定类型形参, 这个类型形参将在声明变量,创建对象时确定(即实际传入的类型参数,也称为类型实参)
Java8新特性之泛型的目标类型推断_动力节点Java学院,动力节点口口相传的Java黄埔军校
必须提供的构造方法,以便创建实例的时候就知道具体实体的类型。 daoimpl :PersonDAOImpl extends GenericDaoImpl, Integer> implements PersonDAO public PersonDAOImpl() { super(Person.class); } 告诉对...
C#2.0 泛型和强制类型转换C#2.0 泛型和强制类型转换C#2.0 泛型和强制类型转换
根据不同类型枚举,set等进行泛型转换,有赋值转换,也有传参转换,大多数都是底层方法描述,可运行
【Flutter】Dart 泛型 ( 泛型类 | 泛型方法 | 特定类型约束的泛型 ) https://hanshuliang.blog.csdn.net/article/details/114059611 博客源码快照
JDK 5.0 中增加的泛型类型,是 Java 语言中类型安全的一次重要改进。但是,对于初次使用泛型类型的用户来说,泛型的某些方面看起来可能不容易明白,甚至非常奇怪。在本月的“Java 理论和实践”中,Brian Goetz 分析...
泛型类型的写法1
获取泛型参数的实际类型}//获取此类的父类的第一个泛型参数的实际类型对应于实际的类型PayResultHandler,其父类HPWallletCallBackH
解析Java泛型的类型擦除.pdf
主要介绍了Java泛型的用法及T.class的获取过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
本示例展示了使用工厂方法设计模式,利用反射,通过泛型接口获取具体类型的列表。比如,要返回一张表的数据,通常使用List<具体表名>,本示例源码展示了通过类型参数传递表名,使用List的形式返回具体的表数据
对DAL数据访问层的封装,一个泛型接口,一个实现泛型接口的父类,泛型父类实现了对某个表的增删改查,用EF技术实现