泛型类只是定义了一个泛型,还没有传递一个类型给这个泛型,所以他是一个空的占位符而已。
如果要实实在在的得到这个泛型的类型,那就必须传递一个东西给他。
所以获取泛型类型,有两种方式,一种通过参数传递,一种通过子类继承的方式传递。
publci class Dao<T> {
private Class<T> clazz;
//第一种方式,无参数的方式,也就是通过子类继承的方式,把子类传递给父类
// Dao<Student> dao = new StudentDao();
public Dao(){
Type type = this.getClass().getGenericSuperclass();
if (type instanceof ParameterizedType) {
ParameterizedType paramType = (ParameterizedType) type;
Type[] args = paramType.getActualTypeArguments();
if (args != null && args.length>0) {
Type arg = args[0];
if (arg instanceof Class) {
this.clazz= (Class<T>) arg;
// System.out.println(this.clazz);
}
}
}
}
//第二种方式,通过参数传递
// Dao<Student> dao = new Dao<>(Student.class);
public Dao(Class<T> clazz) {
this.clazz = clazz;
// System.out.println (this.clazz) ; //输出 Student
}
}
--------------------------------------
public class StudentDao extends Dao<Student> {
public StudnetDao(){ }
}