Подтвердить что ты не робот

Как печатать значения объекта в Java, когда у вас нет исходного кода для класса?

public class MyClass {
        ClassABC abc = new ClassABC();
} 

У меня просто есть .class файл ClassABC. Я хочу напечатать все общедоступные, частные, защищенные и значения по умолчанию для объекта "abc". Как это сделать с помощью Reflection?

4b9b3361

Ответ 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',...