[解決済み] Java Reflectionです。変数の名前を取得する方法は?
質問
Java Reflectionを使用して、ローカル変数の名前を取得することは可能でしょうか? 例えば、こんなのがあったら。
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(***);
}
}
EDIT: この質問は、次のものとは異なります。 Javaで、関数に渡された変数の名前を見つける方法はありますか? 他の質問(受け入れられた答えを含む)が変数の値をテストすることにもっと焦点を当てているのに対し、より純粋に、ローカル変数の名前を決定するためにリフレクションを使うことができるかどうかについて質問しているという点で、です。
どのように解決するのですか?
Java 8では、ローカル変数の名前情報の一部がリフレクションで利用できるようになりました。詳細は "アップデート" の項を参照してください。
完全な情報はクラスファイルに格納されることが多い。コンパイル時の最適化の1つは、これを削除してスペースを節約することです(そして、いくらかの難読化も提供します)。しかし、それが存在する場合、各メソッドは局所変数テーブル属性を持ち、局所変数の型と名前、およびそれらがスコープ内にある命令の範囲をリストアップします。
のようなバイトコードエンジニアリングライブラリは、おそらく ASM を使えば、この情報を実行時に検査することができます。この情報を必要とする妥当な場所は、開発ツールの中だけだと思うので、バイトコードエンジニアリングは他の目的でも役に立つと思われます。
アップデートする
限定対応となりました
がJava 8に追加されました。
パラメータ(ローカル変数の特殊なクラス)名がリフレクションで利用できるようになりました。他の目的の中で、これは
@ParameterName
アノテーションを使用します。
関連
-
[解決済み] リフレクションを使用して文字列からプロパティ値を取得する
-
spring-boot 401 このリソースにアクセスするには完全な認証が必要です エラー解決
-
[解決済み] JavaでInputStreamを読み込んでStringに変換するにはどうすればよいですか?
-
[解決済み] JavaにおけるHashMapとHashtableの違いは何ですか?
-
[解決済み] Java Mapの各エントリを効率的に反復処理するには?
-
[解決済み] Javaでメモリーリークを発生させるにはどうしたらいいですか?
-
[解決済み] Javaにおけるpublic、protected、package-private、privateの違いは何ですか?
-
[解決済み] JavaでStringをintに変換するにはどうしたらいいですか?
-
[解決済み] Javaで文字列値からenum値を取得する方法
-
[解決済み】Javaではfinallyブロックは必ず実行されるのですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
myeclipseでコンパイルするとAntエラーが発生する javaの例外が発生しました。
-
jd-gui Java Exceptionが発生しました。
-
VMの初期化中にエラーが発生しました java/lang/NoClassDefFoundError: java/lang/Object
-
エラーの解決方法 jarfile XXX.jarにアクセスできません。
-
Java コンパイルエラー - スレッド "main" で例外 java.lang.Error: 未解決のコンパイル問題です。
-
linux run jarfile Invalid or corrupt jarfile error.
-
Error: java.lang.NoClassDefFoundError: クラス XXXX を初期化できませんでした
-
SocketTimeoutExceptionです。読み込みがタイムアウトしました
-
HttpClientがGZIP形式でない場合の対処法
-
あるコードに出会いましたが、何に使うのか理解できません。 List<String> list = new ArrayList<String>() { { a