以前打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格式的形式更有可讀性