簡單demo
public class Entity1 extends Entity2 {
private String name1 ;
}
public class Entity2 extends Entity3{
private BigDecimal bigDecimal2;
}
public class Entity3 {
private Integer age3;
}
public static void main(String[] args) {
Entity1 entity1 = new Entity1();
entity1.setName1("111");
entity1.setBigDecimal2(new BigDecimal(222));
entity1.setAge3(16);
getAllField1(entity1);
}
需要知道的點
1,根據當前class可以獲取上級class:clazz.getSuperclass()
2,getField() 和 getDeclaredField() 的區別
- getField() 只能獲取public的,包括從父類繼承來的字段
- getDeclaredField() 可以獲取當前類所有的字段,包括private的,但是不能獲取繼承來的字段
寫法一
public static void getAllField1(Object bean) {
Class<?> clazz = bean.getClass();
List<Field> allField = new ArrayList<>();
// 遍歷往上獲取父類,直至最後一個父類
for (; clazz != Object.class; clazz = clazz.getSuperclass()) {
// 獲取當前類所有的字段
Field[] field = clazz.getDeclaredFields();
allField.addAll(new ArrayList<>(Arrays.asList(field)));
for (Field f : field) {
f.setAccessible(true);
try {
System.out.println("屬性名:" + f.getName());
System.out.println("屬性類型:" + f.getGenericType());
System.out.println("屬性值:" + f.get(bean).toString());
System.out.println();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
}
}
寫法二
private static List<Field> getAllField2(Object bean) {
Class clazz = bean.getClass();
List<Field> fields = new ArrayList<>();
while (clazz != null) {
fields.addAll(new ArrayList<>(Arrays.asList(clazz.getDeclaredFields())));
clazz = clazz.getSuperclass();
}
return fields;
}
參考來源於:
https://blog.csdn.net/sinat_28530913/article/details/72301506