如何動態記錄類變量及其值?動態記錄java類變量及其數值
有沒有什麼辦法可以通過僅使用類對象動態地打印變量名及其值?
例如像:
我們通過Person
類對象,並輸出結果是:
Person:: age:10, name: abc
類似的東西..
編輯:
有許多類。除了覆蓋toString()
方法以外的任何其他解決方案?這一切都可以是動態的。就像傳遞類對象一樣?
如何動態記錄類變量及其值?動態記錄java類變量及其數值
有沒有什麼辦法可以通過僅使用類對象動態地打印變量名及其值?
例如像:
我們通過Person
類對象,並輸出結果是:
Person:: age:10, name: abc
類似的東西..
編輯:
有許多類。除了覆蓋toString()
方法以外的任何其他解決方案?這一切都可以是動態的。就像傳遞類對象一樣?
你會想使用一些通用的管理語言reflection。反射允許您在運行時瞭解程序的內部。
在Java中,您需要在您的類(或任何其他類)上使用getFields()函數。
@Override
public String toString() {
for(Field field : this.getClass().getFields()) {
System.out.println(field.getName() + ":" + field.get(this) + ",");
}
}
這允許您添加新字段而不需要更新toString()
函數。
toString()'person'對象來自哪裏? – HashimR
對不起,編輯錯誤。 '人'應該是'這個'。修正了我的答案。 –
如果這是您要找的內容,請將其設置爲接受的答案。 :) –
如果您覆蓋toString
方法並在sysout
語句中使用Person類,則其toString
將在內部調用。因此,如您所述覆蓋toString方法來打印對象。
請參閱我的編輯.... – HashimR
我相信你想覆蓋Object.toString
。
然後您可以在返回的String
中添加所需的任何描述性字段或類名稱引用。
然後,如果你要動態地無論您使用的記錄器記錄類(或簡稱,System.out
),你可以添加一個實例說明(構造函數執行後可能)和日誌類的String
表示那裏。
例如:
public class Foo {
private int blah;
public Foo() {
blah = 1;
System.out.println(this);
}
@Override
public String toString() {
return getClass().getName().concat(": ").concat(String.valueOf(blah));
}
}
public class Main {
public static void main(String[] args) {
new Foo();
}
}
輸出:
test.Foo: 1
請參閱我的編輯 – HashimR
覆蓋的Person
類toString
方法。
public String toString(){
return "Person:: age:"+age+", name: "+name;
}
請參閱我的編輯.. – HashimR
您可以在您的方法中使用'cmbasnett'回答 –
你的意思是傳遞一個「Class對象」或者僅僅意味着傳遞一個「對象」? –