2012-10-09 173 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等等。)