android開發學習 -- 通過反射去獲取類的屬性

以前打log喜歡用toString,然後自己重寫toString的方法 比如有個類

    Diamond class Diamod {  
        String color;  
        String size;  
        @Override public String toString() { 
            return "color:" + color + " size:" + size; 
        } 
    }

後來發現屬性一多特別麻煩 後來想到反射可以查對於的屬性名跟屬性值,剛好可以用在這裏(沒處理異常)

    @Override public String toString() { 
        // 獲取該類的所有屬性值域 
        Field[] fields = this.getClass().getFields(); 
        for(Field field : fields) { 
            // 獲取該屬性名稱與值 
            log += filed.getName() + filed.get(this); 
        } 
        return log; 
    }

發現上述代碼有問題 就是getFields()會把父類的域也打印出來,有時候還是希望父類子類分開 發現有另外一個方法getDeclaredFields()

java api 文檔
getDeclaredFields
public Field[] getDeclaredFields() throws SecurityException

返回接口或類定義的所有屬性的Fileld對象數組,包括public,protected,default(package),private訪問權限的屬性,但不包括繼承的屬性。數組裏的元素沒有經過排序,也沒有特殊的順序。假如類或接口沒有聲明屬性,或該類代表一個原始的類型(Long等),array class或void,該方法返回一個長度爲0的數組。

getFields public Field[] getFields() throws SecurityException

返回該類或接口所有訪問權限爲public的屬性


反射的跟權限訪問有關係,跟final,static修飾符有關,具體關係以後在去探究。 反射跟繼承也有很多問題。有空測一下這東西。

最近發現使用Gson將對象打印成json格式的形式更有可讀性

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