Как можно определить, является ли локальная переменная 'final' из байт-кода Java? (Относится к BCEL)
Где находится такая информация, как если бы локальная переменная "final" сохранялась в байт-коде Java? Я знаю, что для полей (глобальные переменные) и методов они находятся в битах флага доступа, но не могу найти эквивалент в таблице локальных переменных.
Меня интересует этот вопрос, так как я использую BCEL, чтобы проверить, является ли локальная переменная конечной, и нашел эквивалент для полей, методов и классов в классе AccessFlags.
Заранее спасибо.
3 ответа
Окончательность локальных переменных проверяется компилятором и не попадает в байт-код. Эта информация не требуется во время выполнения и, следовательно, не сохраняется в байт-коде.
JVM обрабатывает финальные и не финальные локальные переменные одинаково.
Короткий ответ - вы не можете. Флаг доступа 'final' для локальных переменных только сообщает компилятору, что значение переменной нельзя переназначить. См. Раздел 4.7.13 спецификации JVM.
Я не верю, что вы можете определить final
локальная переменная; это можно доказать, написав небольшой метод с и без final
Ключевое слово и сравнение байт-кода.