Как можно определить, является ли локальная переменная 'final' из байт-кода Java? (Относится к BCEL)

Где находится такая информация, как если бы локальная переменная "final" сохранялась в байт-коде Java? Я знаю, что для полей (глобальные переменные) и методов они находятся в битах флага доступа, но не могу найти эквивалент в таблице локальных переменных.

Меня интересует этот вопрос, так как я использую BCEL, чтобы проверить, является ли локальная переменная конечной, и нашел эквивалент для полей, методов и классов в классе AccessFlags.

Заранее спасибо.

3 ответа

Решение

Окончательность локальных переменных проверяется компилятором и не попадает в байт-код. Эта информация не требуется во время выполнения и, следовательно, не сохраняется в байт-коде.

JVM обрабатывает финальные и не финальные локальные переменные одинаково.

Короткий ответ - вы не можете. Флаг доступа 'final' для локальных переменных только сообщает компилятору, что значение переменной нельзя переназначить. См. Раздел 4.7.13 спецификации JVM.

Я не верю, что вы можете определить finalлокальная переменная; это можно доказать, написав небольшой метод с и без final Ключевое слово и сравнение байт-кода.

Другие вопросы по тегам