1、构造BaseDao泛型类
class BaseDao<T>{ private Class<T> entityClass; // 通过反射获取实际运行的精确类
public BaseDao() {
Type genType = getClass().getGenericSuperclass();
Type[] params = ((ParameterizedType) genType).getActualTypeArguments();
entityClass=(Class<T>) params[0];
} //泛型的实际类型参数的类全名
public String getEntityName(){
return entityClass.getName();
} //泛型的实际类型参数的类名
public String getEntitySimpleName(){
return entityClass.getSimpleName();
} //泛型的实际类型参数的Class
public Class<T> getEntityClass() {
return entityClass;
}
}
2、User实现类
class User extends BaseDao<User>{ }
3、测试类:
public class TestReflect { public static void main(String[] args) {
User u1=new User();
System.out.println(u1.getEntityClass());
System.out.println(u1.getEntityName());
System.out.println(u1.getEntitySimpleName());
}
}
输出结果为;
class Reflection.User
Reflection.User
User
注意:
BaseDao类不能够直接来使用,而是应该通过其子类来使用,Base 应该用来作为一个基类,我们要用的是它的具体的子类