當(dāng)我們通過Class.getDeclaredFieldName("fieldName")
獲取field之后,
我們有兩種方式來后期field type:
public class Demo {
@Test
public void test() throws ClassNotFoundException {
Class clazz = Class.forName("Market");
Field[] declaredFields = clazz.getDeclaredFields();
for(int i = 0; i < declaredFields.length; i++){
String name = declaredFields[i].getName();
ParameterizedType genericType = (ParameterizedType)declaredFields[i].getGenericType();
Class<?> type = declaredFields[i].getType();
System.out.println("type: " + type);
System.out.println("genericType: " + genericType);
Type parameterType = genericType.getActualTypeArguments()[0];
System.out.println("parameter type: " + parameterType);
}
}
}
class Market{
List<Long> list = new ArrayList();
}
- getType()
這種方式獲取到的類型會(huì)擦去泛型瘫析,返回List
輸出type: interface java.util.List
- getGenericType()
這種方法會(huì)保留泛型信息
輸出genericType: java.util.List<java.lang.Long>
通過調(diào)用genericType.getActualTypeArguments()
可以獲取泛型具體的參數(shù)類型
輸出parameter type: class java.lang.Long