Java反射機制,獲取對象的屬性和值(包括所有父類)

簡單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

https://blog.csdn.net/WZH577/article/details/94432056

發佈了212 篇原創文章 · 獲贊 163 · 訪問量 41萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章