当您没有该类的源代码时,如何在Java中打印该对象的值?

2022-09-01 20:01:55
public class MyClass {
        ClassABC abc = new ClassABC();
} 

我只有一个classABC的.class文件。我想打印“abc”对象的所有公共,私有,受保护和默认字段值。如何使用反射执行此操作?


答案 1

您可以通过 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);
}

另请参阅:


答案 2

你也可以在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',...