15

独自の注釈を作成して、ローカル変数に注釈を付けたいと思います。アノテーションを書くことは問題ではなく、実行時にそれらの情報を取得することが問題です。注釈付きのメソッドまたはメソッド パラメーターからしか情報を取得できませんでしたが、ローカル変数からは取得できませんでした。入手する方法はありますか?

私自身の注釈は次のようなものです。

public void m(int a)  
@MyOwnAnnotation(some information)  
int b = 5;  
}  

または、代わりに、メソッドのコードを取得してさらに解析し、最終的に注釈値を取得する方法はありますか?

前もって感謝します。

4

4 に答える 4

21

リフレクションでは、ローカル変数を取得できません。したがって、リフレクションを介してローカル変数の注釈を取得することはできません。この種の注釈は、コンパイラの警告にのみ使用されると思います。

http://www.eclipse.org/aspectj/doc/released/adk15notebook/annotations.htmlを見ることができます

ローカル変数の注釈は、注釈型に設定された保持ポリシーに関係なく、クラス ファイル (または実行時) に保持されません。JLS 9.6.1.2 を参照してください。

メソッド コードを取得したくない場合は、JavaParser ( http://javaparser.org/ ) を使用できます。

于 2013-06-28T13:02:18.563 に答える
13

Java 8 以降、ローカル変数の注釈はクラス ファイルに保持されます。Erick Hagstrom が指摘したように、この長年のバグは JSR 308 によって修正され、Java 言語に型注釈も追加されました。

ただし、Java のリフレクション API は、メソッド本体内でアクセスできるように更新されていません。クラスファイルを自分で解析する必要があります。ASMなどのツールを使用できます。 EDIT : JavaParser は Java 1.5 以降に更新されていないため、お勧めしません。 JavaParserが更新されました。

于 2014-09-30T08:10:51.767 に答える