Более короткий метод динамического определения имени текущего метода
Я ищу способ получить имя текущего метода, не создавая пустой объект. Есть ли способ сделать это? Это приведет к упорядочению кода регистрации.
Вот что мы делаем сейчас:
new Object() {}.getClass().getEnclosingMethod().getName(
Ответы
Ответ 1
Как насчет Thread.currentThread().getStackTrace()[1]
?
Так как это позволяет вам изучать более высокие уровни трассировки стека, вы можете легко обернуть это в вспомогательный метод (см. ниже). Он также дает вам возможность получить немного больше информации, чем просто имя метода, например имя файла, номер строки и т.д.
edit Вспомогательный метод может выглядеть примерно так (спасибо @Esailija):
public static String getMethodName() {
return Thread.currentThread().getStackTrace()[2].getMethodName();
}
Ответ 2
Вы также можете использовать
Thread.currentThread().getStackTrace()[1].getMethodName()
содержит последний вызов метода, но не короче, чем
new Object() {}.getClass().getEnclosingMethod().getName
Я не знаю, какой способ сортировщика это сделать.
Ответ 3
Вы можете использовать thread.currentThread().getStacktrace()[0].getMethodName()
. Но это даже занимает больше времени, чем new Throwable().getStacktrace()
(см. http://alexradzin.blogspot.co.il/2011/12/how-slow-getstacktrace-is.html)