通过反射机制获取父类在内的所有属性字段

错误写法:

我之前写的通过反射拿到接口入参是这样写的,但是这样写有一个问题,就是无法获得父类的参数信息,导致日志无法打印出全部参数。

Class clazz = object.getClass();
clazz.getDeclaredFields();
clazz.getFields()

正确写法:

这个方法通过while循环及getSuperClass()方法获取当前类的父类再进行getDeclaredFields()即可,注意这个方法返回的是一个Field数组,然后如果我们想要把这些属性拼接到一起,当然是使用链表更方便一些,利用Arrays.asList()方法将数组转化为链表,注意:这个方法返回的是一个List<>也就是抽象列表,所以要将其再用ArrayList初始化一次得到的列表才可变,否则得到的是一个不可变的列表。

public static Field[] getAllFields(Object object){
  Class clazz = object.getClass();
  List<Field> fieldList = new ArrayList<>();
  while (clazz != null){
    fieldList.addAll(new ArrayList<>(Arrays.asList(clazz.getDeclaredFields())));
    clazz = clazz.getSuperclass();
  }
  Field[] fields = new Field[fieldList.size()];
  fieldList.toArray(fields);
  return fields;
}

猜你喜欢

转载自blog.csdn.net/weixin_55229531/article/details/131690341