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);
}

从这个问题

但是我想要一些可以从活动对象而不是类中获取属性的东西。我知道我需要自省我只是不确定如何从活动对象中获取。

4

3 回答 3

1

这:

Object value = field.get(abc);

从 abc 引用的实例化对象中获取值。

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

于 2012-10-09T09:50:48.433 回答
0

类具有属性/属性,对象是一种状态,它只有这些属性的值。

ClassABC abc = new ClassABC();

上面的声明你创建了 ClassABC 类的对象。

Object value = field.get(abc);

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

#Field.get()

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

于 2012-10-09T09:50:12.287 回答
0

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

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

(Java 不允许您即时向对象添加新字段/属性……例如 Javascript、Python、Ruby 等语言。)

于 2012-10-09T10:05:46.793 回答