如果没有类的源代码,如何在Java中打印对象的值?
public class MyClass { ClassABC abc = new ClassABC(); }
我只有一个ClassABC的.class文件。 我想打印“abc”对象的所有公共,私有,受保护和默认字段值。 我怎么能用Reflection做到这一点?
您可以通过Class#getDeclaredFields()
获取所有字段。 每个返回一个Field
对象,您可以使用get()
方法获取该值。 要获取非公共字段的值,只需将Field#setAccessible()
为true
。
所以,坚持:
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); }
也可以看看:
- 反思教程
您还可以在JVM上安装jython – Python itnerpreter,并使用内置的Python“dir”函数。
这很棒,因为它允许您与对象进行实时交互:
[gwidion@powerpuff]$ jython Jython 2.2.1 on java1.6.0_13 Type "copyright", "credits" or "license" for more information. >>> import java.awt >>> dir(java.awt.Window) ['active', 'addPropertyChangeListener', 'addWindowFocusListener', 'addWindowListener', 'addWindowStateListener', 'alwaysOnTop', 'alwaysOnTopSupported', 'applyResourceBundle', 'bufferStrategy', 'createBufferStrategy',...