我正在寻找一种获取当前方法名称的方法,而无需创建空白对象。有没有办法做到这一点?这将整理我们的日志代码。
以下是我们现在所做的事情:
new Object() {}.getClass().getEnclosingMethod().getName(
答案 0 :(得分:17)
Thread.currentThread().getStackTrace()[1]
怎么样?
由于这使您能够检查更高级别的堆栈跟踪,因此您可以轻松地将其包装在辅助方法中(参见下文)。它还为您提供了获取比方法名称更多信息的选项,例如文件名,行号等。
编辑帮助方法看起来像这样(感谢@Esijija):
public static String getMethodName() {
return Thread.currentThread().getStackTrace()[2].getMethodName();
}
答案 1 :(得分:6)
您也可以使用
Thread.currentThread().getStackTrace()[1].getMethodName()
包含最后一个方法调用,但不会短于
new Object() {}.getClass().getEnclosingMethod().getName
我不知道有一种分拣方式。
答案 2 :(得分:3)
您可以使用thread.currentThread().getStacktrace()[0].getMethodName()
。但这比new Throwable().getStacktrace()
(见http://alexradzin.blogspot.co.il/2011/12/how-slow-getstacktrace-is.html)