PRivate Class clazz;// 在父類中提供有參數(shù)的構(gòu)造方法:public BaseDaoImpl() { // 如果去掉子類的構(gòu)造方法,就必須在父類中提供無參數(shù)的構(gòu)造,而且在父類無參數(shù)的構(gòu)造方法中,獲得具體類型的Class。 // 需要使用泛型的反射。 // 獲得具體子類的Class對象。 Class c = this.getClass(); // 代表的子類的Class,CustomerDaoImpl或者LinkManDaoImpl的Class // 通過Class獲取帶有泛型的父類: Type type = c.getGenericSuperclass(); // 獲得的是BaseDaoImpl<Customer>或者是BaseDaoImpl<LinkMan> System.out.println("type======"+type); // BaseDaoImpl<Customer>其實就是參數(shù)化的類型,將type強轉(zhuǎn)為參數(shù)化的類型 ParameterizedType pType = (ParameterizedType) type;//BaseDaoImpl<Customer> 或者是BaseDaoImpl<LinkMan> // 調(diào)用參數(shù)化類型中的方法,獲得實際類型的參數(shù): Type[] types = pType.getActualTypeArguments(); // 獲得實際類型參數(shù)的數(shù)組。但實際中只有一個 Customer或LinkMan // 獲得具體的實際類型參數(shù):Customer或者LinkMan this.clazz = (Class) types[0];}
新聞熱點
疑難解答