2012-10-09 96 views
0

我抓住這段代碼:反思對象打印屬性

ClassABC abc = new ClassABC(); 
for (Field field : abc.getClass().getDeclaredFields()) { 
    field.setAccessible(true); 
    String name = field.getName(); 
    Object value = field.get(abc); 
    System.out.printf("Field name: %s, Field value: %s%n", name, value); 
} 

from this question

但是我想要的東西,將來自住對象,而不是搶類的屬性。我知道我需要自省,我只是不確定如何從活體中獲取內容。

回答

1

Object value = field.get(abc); 

抓鬥從由ABC引用的instanticated對象的值。

您只能反省Classes,然後使用提供的Fields和Methods與實例化的Objects進行交互。

0

類有屬性/屬性,對象是一個狀態,它只有這些屬性的值。

ClassABC abc = new ClassABC(); 

上面的聲明,你創建的類ClassABC的對象。

Object value = field.get(abc); 

field.get(abc)將返回字段的值對象abc。這樣你可以在運行時對Object的屬性值進行自省。

#Field.get()

返回該字段所表示的字段的值,指定的對象上。如果該對象具有基本類型,則該值將自動包裝在對象中。

0

然而,我想要的東西,將抓住活的對象,而不是類的屬性。

「活」對象是某個類的實例,該類將確定該對象具有哪些字段。您問題中的代碼完全符合您的要求。

(Java不允許您將新的字段/屬性添加到對象上,例如Javascript,Python,Ruby等等。)