2011-07-08 5 views
0

明示的なバイトコード操作ツールや他のフレームワークを使用せずに、Java 7で実行時にメソッドの引数値を取得できますか?Java 7で動的にメソッド・メソッドにアクセス

私のjavassistロギングフレームワークに必要です。

public void foo(String arg1, String arg2){ 
    //injected code 
    Object[] args; 
    args = ???;//get arg1 and arg2 values in current method context 
    Logger.logMethodArgs(args); 
    //end of injected code 
    ... 
} 

答えて

1

は基本的には、レベル何のようなもので、唯一の言語レベルの変更は、プロジェクトのコインであり、変更されました。

もちろん、上記のコードでString arg1, String arg2String ... argsに変更できますが、異なるタイプの引数では機能しません。これを回避する別の方法は、IDE(例:Eclipse)にAST(抽象構文ツリー)内の情報を使用してロギングステートメントを生成させることです。どの解析IDEでもこの権利を得ることができます。テキストエディタを使用している場合、プログラマはもう少しして、引数の数を自分自身で繰り返す必要があります。

+0

あなたの答えをありがとう、私はそれが不可能だとわかったので...私はちょうど引数のオブジェクトへの参照を初期化する特定の注入を使用するつもりですので、私は注入されたコードの次の部分でこの参照を使用することができます。現時点では、(Javaクラスのデバッグ情報を使用して)変数名を使用してリファレンスの初期化コードを生成しています。後でコード解析ツールを使用してデバッグフラグをコンパイルする必要があります。 – setec

+0

喜んで助けになるなら、喜んで答えを受け入れることを忘れないでください。 –

1

http://paranamer.codehaus.orgにはパラメータ名が表示されます。しかし、その別のフレームワーク。私はMavenのための 'shade'プラグインを使って、ビルドしているものにクラスを引き込みますが、エンドユーザには推移的な依存関係はありません。

関連する問題