2

オブジェクトをパラメータとしてメソッドに渡しています。そのオブジェクトの名前を知りたいのですが、オブジェクトをメソッドに渡すために使用している特定の参照変数です。これについて調べる方法はありますか?

または、一般に、呼び出し元のメソッドがその値を呼び出したメソッドに渡すために使用する変数の名前を調べる方法はありますか? 前もって感謝します。

- 上記の最初の Q について: オブジェクトがそれを指す多くのハンドルを持つことができることを認識しています。これはむしろ、パラメーター名がメソッド内で何らかの「特別な注意」を払っているかどうか、またはパラメーターが値を渡した後は問題にならないかどうかの問題です。

4

2 に答える 2

2

あなたが求めているのは、Java によってスタックに置かれた情報以上のものだと思います。JVM が変数によって保持されているハンドルを取得し、それをスタックに入れてメソッドを呼び出すときに、変数の名前を記録する理由はありません。実際、通常、コンパイル後もその名前を保持する本当の理由はありません。なぜそのようなことをしたいのかについてより多くの情報を提供できれば、おそらくより合理的な回答が得られるでしょう.

あなたが望んでいたことが可能であれば、それはStackTraceElement経由ですが、API を見ると、あなたが求めているようなものは何もありません。

于 2012-11-20T00:21:21.567 に答える
2

これが機能しない理由は複数あります。最も重要なこと:

関数の引数は変数である必要はありません。式のテキスト表現を要求することもできますが、それには、プログラムに保存されている未使用のデータが大量に必要になります。変数名でさえプログラムに保存されていません。コンパイルによって保持される唯一の変数名は、静的およびインスタンス フィールドとメソッドです。それでも、(呼び出し元を逆コンパイルしようとする以外に) 呼び出し式にアクセスする方法はありません。

この種のデータを持つ関数が必要な場合は、それを別の引数として指定する必要があります。

doLog(foo, "foo");
doLog(new Foo(), "new Foo()");
/*or*/ doLog(new Foo(), null);
于 2012-11-20T00:30:06.217 に答える