問題ステートメント:
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 などのバイトコード エンジニアリング ツールは、実行時にこの情報を検査するメカニズムを提供できる可能性があります。この機能は主に開発環境でのニッチな用途に使用されるため、このようなライブラリは単に変数名を抽出するだけでなく、補完的な機能を提供します。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3