public class MyClass {
ClassABC abc = new ClassABC();
}
我只有一个ClassABC的.class文件。我想打印“abc”对象的所有public,private,protected和default字段值。我怎么能用Reflection做到这一点?
答案 0 :(得分:49)
您可以按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);
}
答案 1 :(得分: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',...