1概要

時々、実行されている現在のJavaメソッドの名前を知る必要があります。

このクイック記事では、現在の実行スタックでメソッド名を把握するための簡単な方法をいくつか紹介します。


2

getEnclosingMethod


を使用する

実行されているメソッドの名前は、

getEnclosingMethod()

APIを使用して確認できます。

public void givenObject__whenGetEnclosingMethod__thenFindMethod() {
    String methodName = new Object() {}
      .getClass()
      .getEnclosingMethod()
      .getName();

    assertEquals("givenObject__whenGetEnclosingMethod__thenFindMethod",
      methodName);
}


3 Throwable__スタックトレースの使い方


Throwable

スタックトレースを使用すると、現在実行中のメソッドを使用してスタックトレースを取得できます。

public void givenThrowable__whenGetStacktrace__thenFindMethod() {
    StackTraceElement[]stackTrace = new Throwable().getStackTrace();

    assertEquals(
      "givenThrowable__whenGetStacktrace__thenFindMethod",
      stackTrace[0].getMethodName());
}


4スレッドスタックトレースの使用

また、現在のスレッドのスタックトレース(JDK 1.5以降)には通常、実行されているメソッドの名前が含まれています。

public void givenCurrentThread__whenGetStackTrace__thenFindMethod() {
    StackTraceElement[]stackTrace = Thread.currentThread()
      .getStackTrace();

    assertEquals(
      "givenCurrentThread__whenGetStackTrace__thenFindMethod",
      stackTrace[1].getMethodName());
}

ただし、この解決策には1つの重大な欠点があることを忘れないでください。仮想マシンによっては、1つ以上のスタックフレームをスキップすることがあります。

これは一般的ではありませんが、これが起こる可能性があることに注意する必要があります。


5結論

このチュートリアルでは、現在実行されているメソッドの名前を取得する方法の例をいくつか紹介しました。例はスタックトレースと

getEnclosingMethod()

に基づいています。

いつものように、この記事https://github.com/eugenp/tutorials/tree/master/core-java[over on GitHub]で提供されている例をチェックすることができます。