泛型類型

獲取泛型的類型,最重要的是要學會使用接口: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;

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章