ローカル変数がJavaバイトコードに「final」で格納されているかどうかなどの情報はどこにありますか?フィールド(グローバル変数)とメソッドの場合、これらはアクセスフラグビットにありますが、ローカル変数テーブルに同等のものが見つからないようです。
BCELを使用してローカル変数がfinalであるかどうかを確認し、AccessFlagsクラスのフィールド、メソッド、およびクラスに相当するものを見つけたので、この質問に興味があります。
前もって感謝します。
ローカル変数のファイナリティはコンパイラによってチェックされ、バイトコードにはなりません。この情報は実行時には必要ないため、バイトコードには保存されません。
JVM は、最終ローカル変数と非最終ローカル変数を同じように扱います。
簡単な答え - できません。ローカル変数の「最終」アクセス フラグは、変数値を再割り当てできないことをコンパイラに通知するだけです。JVM 仕様のセクション 4.7.13 を参照してください。
final
ローカル変数の性質を判断できるとは思いません。これは、キーワードの有無にかかわらず小さなメソッドを作成final
し、バイトコードを比較することで証明できます。