如果没有类的源代码,如何在Java中打印对象的值?

use*_*262 20 java reflection

public class MyClass {
        ClassABC abc = new ClassABC();
} 
Run Code Online (Sandbox Code Playgroud)

我只有一个ClassABC的.class文件.我想打印"abc"对象的所有public,private,protected和default字段值.我怎么能用Reflection做到这一点?

Bal*_*usC 50

你可以获得所有领域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);
}
Run Code Online (Sandbox Code Playgroud)

也可以看看:


jsb*_*eno 5

您还可以在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',...
Run Code Online (Sandbox Code Playgroud)