public class Demo {
private List<Person> arrs;
public static void main(String[] args) throws Exception {
Field arr = Demo.class.getDeclaredField("arrs");
arr.setAccessible(true);
System.out.println(getActualTypeArgument(arr).getClass().getSimpleName());
}
/**
* 获取对象中集合字段的泛型
* @param field field是List<T>类型
* @return 此方法获取T类型的对象
* @throws IllegalAccessException
* @throws InstantiationException
*/
public static Object getActualTypeArgument(Field field) throws IllegalAccessException, InstantiationException {
Class<?> curFieldType = field.getType();
// 集合List元素
if (curFieldType.equals(List.class)) {
// 当前集合的泛型类型
Type genericType = field.getGenericType();
if (genericType instanceof ParameterizedType) {
ParameterizedType pt = (ParameterizedType) genericType;
// 得到泛型里的class类型对象
Class<?> actualTypeArgument = (Class<?>) pt.getActualTypeArguments()[0];
return actualTypeArgument.newInstance();
}
}
return null;
}
}
Java反射获取对象中集合字段上的泛型对象
最新推荐文章于 2023-05-25 21:55:33 发布