獲取泛型的類型,最重要的是要學會使用接口:ParameterizedType
該接口類型代表了所有具有泛型結構的類型,比如:
1、集合泛型類型 List<Class>等
2、普通類型 Class<?>等
若某類型是集合類型,則需要調用ParameterizedType類型的getActualTypeArguments()方法即可,其中返回的Type[]數組中,依次包含了泛型中的每一個類型,比如:Map<String, Class>集合中,數組[0]代表第一個類型String,數組[1]代表了第二個類型Class。
其中泛型中的類型也允許是一個ParameterizedType類型,此時需要將Type類型轉換成ParameterizedType類型:
比如獲取某類屬性:List<Class<E>>類型或者List<E>中的泛型類型: E ,可以採用如下方法:
Type type = ((ParameterizedType)Field.getGeneralType).getActualTypeArguments()[0];
if(type instanceof ParameterizedType){
//List<Class<E>>中的E
E e = (E)((ParameterizedType)type).getActualTypeArguments()[0];
}else{
//List<E>中的E
E e = (E)type;
}
還可以通過ParameterizedType接口獲取原始類型:調用getRawType()方法即可:
比如獲取某類的屬性:List<Class<?>>類型或者List<Class>中的類型: Class ,可以採用如下方法:
Type type = ((ParameterizedType)Field.getGeneralType).getActualTypeArguments()[0];
if(type instanceof ParameterizedType){
//List<Class<?>>中的Class
Class e = (Class)((ParameterizedType)type).getRawType();
}else{
//List<Class>中的Class
Class e = (Class)type;
}