【问题标题】:Introspection on the Object to print attribute [closed]对要打印属性的对象的自省[关闭]
【发布时间】:2012-10-09 09:46:29
【问题描述】:
我抓到了这段代码:
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
但是我想要一些东西来从活动对象而不是类中获取属性。我知道我需要自省我只是不知道如何从活动对象中获取。
【问题讨论】:
标签:
java
reflection
introspection
【解决方案1】:
这个:
Object value = field.get(abc);
从 abc 引用的实例化对象中获取值。
您只能自省类,然后使用提供的字段和方法与实例化的对象进行交互。
【解决方案2】:
类有属性/属性,对象是一个状态,它只有这些属性的值。
ClassABC abc = new ClassABC();
您在上面的声明中创建了 ClassABC 类的对象。
Object value = field.get(abc);
field.get(abc) 将返回对象abc 的字段值。这样您就可以在运行时对 Object 的属性值进行自省。
#Field.get()
返回指定对象上此字段表示的字段的值。如果该值具有原始类型,则该值会自动包装在对象中。
【解决方案3】:
但是我想要一些东西来从活动对象而不是类中获取属性。
“活动”对象是某个类的实例,该类将确定该对象具有哪些字段。您问题中的代码完全符合您的要求。
(Java 不允许您在运行中向对象添加新字段/属性...例如 Javascript、Python、Ruby 等语言。)