実行されているメソッドの名前を取得する方法

実行されているメソッドの名前を取得する方法は?

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()に基づいています。

いつものように、この記事over on GitHubで提供されている例を確認できます。