【问题标题】:How to print values of an object in Java when you do not have the source code for the class? [duplicate]当您没有类的源代码时,如何在 Java 中打印对象的值? [复制]
【发布时间】:2010-07-10 02:39:51
【问题描述】:
public class MyClass {
        ClassABC abc = new ClassABC();
} 

我只有一个 ClassABC 的 .class 文件。我想打印“abc”对象的所有公共、私有、受保护和默认字段值。如何使用反射来做到这一点?

【问题讨论】:

  • 从apache方式看ReflectionToStringBuilder

标签: java reflection


【解决方案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);
}

另见:

【讨论】:

  • 这正是我想要的。谢谢!
  • 请记住,这不包括继承的字段!
  • 代替getDeclaredFields(),使用getAllFields() from stackoverflow.com/a/2405757/755804
  • 最佳答案!!!
【解决方案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',...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-06-27
    • 2014-01-03
    • 1970-01-01
    • 2012-02-15
    • 2014-04-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多