获取父类属性
// 对象的class对象,
Class<? extends EngineeringRequirementMachineListVo> aClass = machine.getClass();
// 获取父级的class对象
Class<?> superclass = aClass.getSuperclass();
// 只能获取当前类声明的所有字段(包括私有的),不会获取到父类(超类)中的字段
Field[] fields2 = superclass.getDeclaredFields();
// 便利字段数组
for (Field field : fields2) {
String name = field.getName();
if (name.contains("serialVersionUID")) {
continue;
}
Object value;
try {
Field declaredField = superclass.getDeclaredField(name);
// 禁用java的控制检查,以便我们可以访问私有字段
declaredField.setAccessible(true);
// 根据类,获取当前属性值
value = declaredField.get(machine);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
如果想同时获取子类和父类的属性名,可以将子类和父类属性名添加到同一个数组中
// 对象的class对象,
Class<? extends EngineeringRequirementMachineListVo> aClass = machine.getClass();
List<Field> fieldList = new ArrayList<>();
// 获取子类所有的属性名
Field[] fields1 = aClass.getDeclaredFields();
fieldList.addAll(Arrays.asList(fields1));
// 获取父级的class对象
Class<?> superclass = aClass.getSuperclass();
// 获取父类所有的属性名
Field[] fields2 = superclass.getDeclaredFields();
fieldList.addAll(Arrays.asList(fields2));