对象打印属性的自省

时间:2012-10-09 09:46:29

标签: java reflection introspection

我抓住了这段代码:

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

但是我想要的东西会从活动对象而不是类中获取属性。我知道我需要内省我只是不确定如何从实时对象中获取。

3 个答案:

答案 0 :(得分:1)

此:

Object value = field.get(abc);

从abc。

引用的即时对象中获取值

您只能内省类,然后使用提供的字段和方法与实例化的对象进行交互。

答案 1 :(得分:0)

  

Class具有属性/属性,Object是一种状态,它只有这些属性的值。

ClassABC abc = new ClassABC();

在上面的声明中,您创建了ClassABC类的对象。

Object value = field.get(abc);

field.get(abc)将返回对象abc的字段值。这样,您就可以在运行时对Object的属性值进行内省。

#Field.get()

  

返回指定对象上此Field表示的字段的值。如果对象具有基本类型,则该值自动包装在对象中。

答案 2 :(得分:0)

  

但是我想要的东西会从活动对象而不是类中获取属性。

“live”对象是某个类的实例,该类将确定该对象具有哪些字段。您问题中的代码完全符合您的要求。

(Java不允许你动态地向对象添加新的字段/属性......比如Javascript,Python,Ruby等语言。)