java 反射获取字段为List类型中的泛型类型
在java编程时,经常会使用反射去处理对象,有时会需要知道List的泛型类型:示例操作如下
obj = pojo.newInstance(); // 首先得到pojo所定义的字段 Field[] fields = pojo.getDeclaredFields(); for (Field curField : fields) { // 设置字段可访问(必须,否则报错) curField.setAccessible(true); Class<?> curFieldType = curField.getType(); // 集合List元素 if (curFieldType.equals(List.class)) { // 当前集合的泛型类型 Type genericType = curField.getGenericType(); if (null == genericType) { continue; } if (genericType instanceof ParameterizedType) { ParameterizedType pt = (ParameterizedType) genericType; // 得到泛型里的class类型对象 Class<?> actualTypeArgument = (Class<?>)pt.getActualTypeArguments()[0]; List<Object> curEleList = new ArrayList<>(); Object actualType = actualTypeArgument.newInstance(); //....actualType字段处理 curEleList.add(actualType); curField.set(obj, curEleList); } } }