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