当您没有该类的源代码时,如何在Java中打印该对象的值?
2022-09-01 20:01:55
public class MyClass {
ClassABC abc = new ClassABC();
}
我只有一个classABC的.class文件。我想打印“abc”对象的所有公共,私有,受保护和默认字段值。如何使用反射执行此操作?
public class MyClass {
ClassABC abc = new ClassABC();
}
我只有一个classABC的.class文件。我想打印“abc”对象的所有公共,私有,受保护和默认字段值。如何使用反射执行此操作?
您可以通过 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',...