Как получить имя исполняемого метода?

Как получить имя исполняемого метода?

1. обзор

Иногда нам нужно знать имя текущего выполняемого метода Java.

В этой быстрой статье представлены несколько простых способов получить имя метода в текущем стеке выполнения.

2. ИспользуяgetEnclosingMethod

Мы можем найти имя выполняемого метода с помощью APIgetEnclosingMethod():

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());
}

Однако нужно помнить, что у этого решения есть один существенный недостаток. Некоторые виртуальные машины могут пропускать один или несколько кадров стека. Хотя это не часто, мы должны знать, что это может случиться.

5. Заключение

В этом уроке мы представили несколько примеров того, как получить имя выполняемого в данный момент метода. Примеры основаны на трассировках стека иgetEnclosingMethod().

Как всегда, вы можете ознакомиться с примерами из этой статьиover on GitHub.