2013-08-19 53 views
0

如何動態記錄類變量及其值?動態記錄java類變量及其數值

有沒有什麼辦法可以通過僅使用類對象動態地打印變量名及其值?

例如像:

我們通過Person類對象,並輸出結果是:

Person:: age:10, name: abc

類似的東西..

編輯:

有許多類。除了覆蓋toString()方法以外的任何其他解決方案?這一切都可以是動態的。就像傳遞類對象一樣?

+0

你的意思是傳遞一個「Class對象」或者僅僅意味着傳遞一個「對象」? –

回答

1

你會想使用一些通用的管理語言reflection。反射允許您在運行時瞭解程序的內部。

在Java中,您需要在您的類(或任何其他類)上使用getFields()函數。

@Override 
public String toString() { 
    for(Field field : this.getClass().getFields()) { 
     System.out.println(field.getName() + ":" + field.get(this) + ","); 
    } 
} 

這允許您添加新字段而不需要更新toString()函數。

+0

toString()'person'對象來自哪裏? – HashimR

+0

對不起,編輯錯誤。 '人'應該是'這個'。修正了我的答案。 –

+0

如果這是您要找的內容,請將其設置爲接受的答案。 :) –

0

如果您覆蓋toString方法並在sysout語句中使用Person類,則其toString將在內部調用。因此,如您所述覆蓋toString方法來打印對象。

+0

請參閱我的編輯.... – HashimR

0

我相信你想覆蓋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 
+0

請參閱我的編輯 – HashimR

0

覆蓋的PersontoString方法。

public String toString(){ 
    return "Person:: age:"+age+", name: "+name; 
} 
+0

請參閱我的編輯.. – HashimR

+0

您可以在您的方法中使用'cmbasnett'回答 –