反射獲取本類和父類所有屬性


反射獲取本類和父類所有屬性

  1. getFields():獲得某個類的所有的公共(public)的字段,包括父類中的字段。

  2. getDeclaredFields():獲得某個類的所有聲明的字段,即包括public、private和proteced,但是不包括父類的申明字段。

  3. 同樣類似的還有getConstructors()和getDeclaredConstructors()、getMethods()和getDeclaredMethods(),這兩者分別表示獲取某個類的方法、構造函數。

那么問題來了,我要獲取到當前類以及父類的所有屬性,怎么辦?

    /**
     * 獲取本類及其父類的屬性的方法
     * @param clazz 當前類對象
     * @return 字段數組
     */
    private static Field[] getAllFields(Class<?> clazz) {
        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()];
        return fieldList.toArray(fields);
    }

測試:

	public static void main(String[] args) {
        Student student = new Student();
        student.setStuClass("18001");
        student.setStuNum("19800101");
        student.setName("Tom");
        student.setAge("20");

        Class<? extends Student> clazz = student.getClass();
        Field[] fields = getAllFields(clazz);
        for (Field field : fields) {
            System.out.println(field.getName());
        }
    }

【參考】:https://www.cnblogs.com/JackZed/p/6888668.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM