我抓住了这段代码:
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);
}
但是我想要的东西会从活动对象而不是类中获取属性。我知道我需要内省我只是不确定如何从实时对象中获取。
答案 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表示的字段的值。如果对象具有基本类型,则该值自动包装在对象中。
答案 2 :(得分:0)
但是我想要的东西会从活动对象而不是类中获取属性。
“live”对象是某个类的实例,该类将确定该对象具有哪些字段。您问题中的代码完全符合您的要求。
(Java不允许你动态地向对象添加新的字段/属性......比如Javascript,Python,Ruby等语言。)