Декомпилятор IDEA не показывает поле в классе
Абстрактно: есть класс внешней библиотеки, методы которого я использую. При дебаге наткнулся на поле в объекте этого класса, которое я не нахожу при декомпиляции этого класса с помощью IDEA.
При этом рефлексия это поле тоже находит. И рефлексировав объект этого класса и, сделав поле публичным, из него можно вернуть данные.
Вопрос: почему декомпилятор может не отображать поле класса?
Ответы (1 шт):
Потому, что после компиляции исходных файлов, в .class
-файлах не содержится больше информации о наименовании полей и методов. Декомпилятор не может восстановить их, а дебагеру требуются исходные файлы .java
, которые соответствуют скомпилированным файлам для отображения отладочной информации.
IntelliJ IDEA включает в составе декомпилятор, который не создаёт .java
-файлы, а отображает декомпилированные классы прямо в окне редактора.
IntelliJ IDEA включает в себя декомпилятор байт-кода Java, который показывает вам скомпилированный байт-код, как если бы это был читаемый человеком код Java. Декомпилятор включен по умолчанию.
Откройте скомпилированный файл
.class
в редакторе.
Что такое байт-код, и где там находятся поля и методы, можно прочитать в следующей статье: Основы байт-кода в Java и Java байт-код в "Hello World"