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 应该用来作为一个基类,我们要用的是它的具体的子类