Декомпилятор IDEA не показывает поле в классе

Абстрактно: есть класс внешней библиотеки, методы которого я использую. При дебаге наткнулся на поле в объекте этого класса, которое я не нахожу при декомпиляции этого класса с помощью IDEA.

При этом рефлексия это поле тоже находит. И рефлексировав объект этого класса и, сделав поле публичным, из него можно вернуть данные.

Вопрос: почему декомпилятор может не отображать поле класса?


Ответы (1 шт):

Автор решения: Roman C

Потому, что после компиляции исходных файлов, в .class-файлах не содержится больше информации о наименовании полей и методов. Декомпилятор не может восстановить их, а дебагеру требуются исходные файлы .java, которые соответствуют скомпилированным файлам для отображения отладочной информации.

IntelliJ IDEA включает в составе декомпилятор, который не создаёт .java-файлы, а отображает декомпилированные классы прямо в окне редактора.

IntelliJ IDEA включает в себя декомпилятор байт-кода Java, который показывает вам скомпилированный байт-код, как если бы это был читаемый человеком код Java. Декомпилятор включен по умолчанию.

Откройте скомпилированный файл .class в редакторе.

Что такое байт-код, и где там находятся поля и методы, можно прочитать в следующей статье: Основы байт-кода в Java и Java байт-код в "Hello World"

→ Ссылка