Java で現在実行中のメソッドの名前を取得する方法はありますか?
ベストアンサー1
技術的にはこれでうまくいくでしょう...
String name = new Object(){}.getClass().getEnclosingMethod().getName();
ただし、コンパイル時に新しい匿名内部クラスが作成されます (例YourClass$1.class
)。そのため、.class
このトリックを展開するメソッドごとにファイルが作成されます。さらに、実行時に各呼び出しで、それ以外は使用されないオブジェクト インスタンスが作成されます。したがって、これは許容できるデバッグ トリックかもしれませんが、かなりのオーバーヘッドが伴います。
このトリックの利点は、アノテーションやパラメータ名を含むメソッドの他のすべての情報を取得するために使用できるgetEnclosingMethod()
戻り値を使用できることですjava.lang.reflect.Method
。これにより、同じ名前を持つ特定のメソッドを区別できるようになります (メソッドのオーバーロード)。
getEnclosingMethod()
このトリックの JavaDoc によれば、SecurityException
内部クラスは同じクラス ローダーを使用してロードされる必要があるため、エラーをスローしないことに注意してください。したがって、セキュリティ マネージャーが存在する場合でも、アクセス条件を確認する必要はありません。
注意してください: コンストラクターに使用する必要がありますgetEnclosingConstructor()
。(名前付き) メソッドの外側のブロック中は、getEnclosingMethod()
を返しますnull
。