私の主な質問: 変数名、型、または変数の数さえ知らなくても、リフレクションを使用してクラス フィールドを一般的に出力できることはわかっています。ただし、変数名がわからない場合、現在の関数または現在のスコープ内のすべての変数を一覧表示する方法はありますか?
言い換えると:
int x = 5;
int y = 42;
// some more code
//Now I want to println x and y, but assuming I cannot use "x" or "y".
この質問への回答にも満足しています。すべての変数の名前を保存することが許可されているとしましょう。それは役に立ちますか? 例えば:
Set<String> varNames = new HashSet<String>();
int x = 5;
varNames.add("x");
int y = 42;
varNames.add("y");
// some more code
//Now with varNames, can I output x and y without using "x" or "y"?
なぜ私はこれを尋ねているのですか?ANTLR を使用して XYZ 言語を Java に変換しています。任意の時点でプログラムの状態全体を出力する簡単な方法を提供したいと考えています。
私が満足する3番目の可能な解決策:これがJavaで不可能な場合、呼び出し元の関数にアクセスしてスタックを調べる関数のバイトコードを書く方法はありますか? これで問題も解決します。
驚くべきことは、Java に Pythoneval()
や php のget_defined_vars()
.
それが違いを生む場合、私はJava 6を使用していますが、Java 5、6、または7用のものは何でも良いはずです.
ありがとう!