getClass().getGenericSuperclass()返回表示此 Class 所表示的實體(類、接口、基本類型或 void)的直接超類的 Type
然后將其轉換ParameterizedType。
getActualTypeArguments()返回表示此類型實際類型參數的 Type 對象的數組。
[0]就是這個數組中第一個了。
簡而言之就是獲得超類的泛型參數的實際類型。
public class GenericDAO<T> { private Class<T> entityClass; protected GenericDAO() { Type type = getClass().getGenericSuperclass(); Type trueType = ((ParameterizedType) type).getActualTypeArguments()[0]; this.entityClass = (Class<T>) trueType; } }
子類
public class OptionManager extends GenericDAO<MSGC_OPTION> { }
測試類
public class OracleTest { public static void main(String[] args) throws Exception { OptionManager manager = new OptionManager(); } }
這樣在你new OptionManager();以后超類里的entityClass就是子類那里的public class OptionManager extends GenericDAO<MSGC_OPTION> 里面的MSGC_OPTION所對應的class對象了..