public BaseDAO() { //getClass() 获取Class对象,当前我们执行的是 //new FruitDAOImpl() 创建的是FruitDAOImpl的实例 //那么子类构造方法内部首先会调用父类(BaseDAO)的无参构造方法 //因此此处的getClass()会被执行,但是getClass获取的是FruitDAOImpl的Class //所以getGenericSuperclass()获取到的是BaseDAO的Class Type genericType=getClass().getGenericSuperclass(); //ParameterizedType参数化类型 Type[] actualTypeArguments=((ParameterizedType) genericType).getActualTypeArguments(); //获取到<T>中的T的真实的类型 Type actualType=actualTypeArguments[0]; try { entityClass = Class.forName(actualType.getTypeName()); } catch (ClassNotFoundException e) { throw new RuntimeException(e); } }
时间: 2023-02-23 14:56:41 浏览: 89
免服务器软件库微信小程序源码限制
这段代码是实现了一个通用的DAO类,称为BaseDAO。它的构造方法通过getClass()方法获取当前实例的Class对象,再通过getGenericSuperclass()方法获取父类的Class对象,从而得到实际的参数化类型(ParameterizedType),最终通过getActualTypeArguments()方法获取<T>中的T的真实类型,并用Class.forName()方法得到它的Class对象,存储在entityClass字段中。如果在过程中发生了ClassNotFoundException,就抛出一个RuntimeException。
阅读全文