Как печатать значения объекта в Java, когда у вас нет исходного кода для класса?
public class MyClass {
ClassABC abc = new ClassABC();
}
У меня просто есть .class файл ClassABC. Я хочу напечатать все общедоступные, частные, защищенные и значения по умолчанию для объекта "abc". Как это сделать с помощью 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);
}
См. также:
Ответ 2
Вы также можете установить jython - Python itnerpreter на JVM и использовать встроенную функцию "dir" Python.
Это здорово, потому что он позволяет вам взаимодействовать с вашими объектами:
[[email protected]]$ 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',...