ホームページ >Java >&#&チュートリアル >Java Reflection はローカルで宣言された変数名を取得できますか?
問題ステートメント:
Java リフレクションを使用して変数の名前を取得できますか?ローカルで宣言された変数?次のようなコード スニペットがあるとします:
Foo b = new Foo(); Foo a = new Foo(); Foo r = new Foo();
次のような変数名を特定するメソッドを開発できますか:
public void baz(Foo... foos) { for (Foo foo : foos) { // Print the name of each foo - b, a, and r System.out.println(***); // Placeholder for variable name access } }
解決策:
Java 8 までは、リフレクションを介してローカル変数名を取得することはできませんでした。ただし、そのバージョンでは部分的なサポートが導入されました。特殊なタイプのローカル変数であるパラメータ名は、リフレクションを通じてアクセスできるようになりました。これは、依存関係注入フレームワークで一般的に使用される @ParameterName などの注釈を置き換えるのに役立つことがわかりました。
より包括的なローカル変数名情報については、クラス ファイルを調べると、いくつかの洞察が得られる可能性があります。コンパイル中に、最適化手法によりスペースを節約するためにこのデータが削除されることがあります。ただし、存在する場合、メソッドのローカル変数テーブル属性には、それぞれの命令スコープ内の変数の型と名前がリストされます。
ASM などのバイトコード エンジニアリング ツールは、実行時にこの情報を検査するメカニズムを提供できる可能性があります。この機能は主に開発環境でのニッチな用途に使用されるため、このようなライブラリは単に変数名を抽出するだけでなく、補完的な機能を提供します。
以上がJava Reflection はローカルで宣言された変数名を取得できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。