后端开发 - Java反射获取类的所有的属性和父类的所有属性
问题
想获取一个类的所有属性和父类的所有属性
看一下官方文档中关于获取类的属性的两个方法:
返回一个字段对象数组,反映由这个类对象表示的类或接口声明的所有字段。这包括公共、受保护、默认(包)访问和私有字段,但不包括继承字段。
返回一个包含“字段”对象的数组,该数组反映由这个“类”对象表示的类或接口的所有可访问的公共字段。
这两个方法都不能获取所有属性,那我们自己写一个方法。
思路
首先构建一个列表用来存放所有的属性;
获取使用getDeclaredFields()函数获取本类内部的所有属性,并addAll()到列表中;
使用clazz.getSuperclass()方法获取父类,然后获取父类中的所有属性,将其添加到列表中;
最后递归检查父类是否有父类,直到获取不到父类;
编码
/**
* 获取本类及其父类的属性的方法
* @param clazz 当前类对象
* @return 字段数组
*/
private static Field[] getAllFields(Class<?> clazz) {
List<Field> fieldList = new ArrayList<>();
while (clazz != null){
fieldList.addAll(new ArrayList