Class獲取成員變量信息


(1)關於獲取類的字段有兩種方式:getFields()和getDeclaredFields()。

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

    /**
     * 獲取指定類及其子類的public的字段信息
     * @param tempClass
     */
    public static void test1(Class<?> tempClass) {
        Field[] fields= tempClass.getFields();
        for (int i = 0; i < fields.length; i++) {
            System.out.println(fields[i].getName());
        }
    }

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

    /**
     * 獲取指定類的所有字段信息(包括父類的)
     * @param tempClass
     */
    public static void test2(Class<?> tempClass) {
        Field[] fields= tempClass.getFields();
        for (int i = 0; i < fields.length; i++) {
            System.out.println(fields[i].getName());
        }
    }

(2)獲取一個類及其父類的成員變量

獲取一個類及其父類所有的成員變量

    /**
     * 獲取一個類及其父類所有的成員變量
     * @param tempClass
     */
    public static void test3(Class<?> tempClass) {
        List<Field> fieldList = new ArrayList<>();
        fieldList.addAll(Arrays.asList(tempClass.getDeclaredFields()));
        tempClass = tempClass.getSuperclass();
        while (tempClass != null && !tempClass.getName().toLowerCase().equals("java.lang.object")) {
            fieldList.addAll(Arrays.asList(tempClass.getDeclaredFields()));
             // 得到父類,然后賦給自己
            tempClass = tempClass.getSuperclass();
        }
        
        for (Field f : fieldList) {
            System.out.println(Modifier.toString(f.getModifiers())+" "+f.getName()+"::");
        }
    }

 獲取成員變量的訪問類型(如果我們需要獲取一個類擁有的所有的成員變量,即獲取自己所有的以及繼承的父類的成員變量,那就需要獲取字段的訪問類型)

    //獲取字段的訪問級別(1:public,4:protected)
    int modifier =fields[i].getModifiers();
    if(modifier==1 || modifier==4){
        fieldList.add(fields[i]);
    }

 

 獲取指定類所擁有的字段信息

    /**
     * 獲取指定類所擁有的字段信息
     * @param tempClass
     */
    public static void test4(Class<?> tempClass) {
        List<Field> fieldList = new ArrayList<>();
        fieldList.addAll(Arrays.asList(tempClass.getDeclaredFields()));
        tempClass = tempClass.getSuperclass();
        while (tempClass != null && !tempClass.getName().toLowerCase().equals("java.lang.object")) {
            Field[] fields = tempClass.getDeclaredFields();
            for (int i = 0; i < fields.length; i++) {
                // 獲取字段的訪問級別(1:public,4:protected)
                int modifier = fields[i].getModifiers();
                if (modifier == 1 || modifier == 4) {
                    fieldList.add(fields[i]);
                }
            }
            // 得到父類,然后賦給自己
            tempClass = tempClass.getSuperclass();
        }

        for (Field f : fieldList) {
            System.out.println(Modifier.toString(f.getModifiers()) + " " + f.getName() + "::");
        }
    }

 


免責聲明!

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



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