反射获取List类型

VO

@Data
public class Data {
    private List<AA> sysDataDictList;
    private List<BB> sysDataDictDtlList;
}

获取AA、BB

  • getDeclaredFields只会获取本类的字段,而getFields只会获取本类和父类中公有的字段
  • getFields只能获取public的字段,包括父类的,getDeclaredFields只能获取自己声明的各种字段,包括public,protected,private。
  • 要获取父类里的方法,通过 getSuperclass 获取父类的类型,然后再从父类的类型里 getDeclaredFields
Field[] fields = Data.class.getDeclaredFields();
for (Field field : fields) {
   String fieldType = getFieldsType(field);
}

private String getFieldsType(Field field) {
    field.setAccessible(true);
    Class<?> curFieldType = field.getType();
    if (curFieldType.equals(List.class)) {
        Type genericType = field.getGenericType();
        if (genericType instanceof ParameterizedType) {
            ParameterizedType pt = (ParameterizedType) genericType;
            Class<?> actualType = (Class<?>) pt.getActualTypeArguments()[0];
            return actualType.getSimpleName();
        }
    }
    return field.getName();
}

接口图
在这里插入图片描述
hutool反射工具https://hutool.cn/docs/#/
在这里插入图片描述


版权声明:本文为whatzhang007原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。