Как получить имя исполняемого метода?
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.