11

我正在寻找一种无需创建空白对象即可获取当前方法名称的方法。有没有办法做到这一点?这将整理我们的日志记录代码。

这是我们现在要做的:

new Object() {}.getClass().getEnclosingMethod().getName(
4

3 回答 3

18

怎么样Thread.currentThread().getStackTrace()[1]

由于这使您能够检查更高级别的堆栈跟踪,因此您可以轻松地将其包装在辅助方法中(见下文)。它还为您提供了获取更多信息的选项,而不仅仅是方法名称,例如文件名、行号等。

编辑辅助方法可能看起来像这样(感谢@Esailija):

public static String getMethodName() {
    return Thread.currentThread().getStackTrace()[2].getMethodName();
} 
于 2012-11-28T16:18:17.413 回答
6

你也可以使用

Thread.currentThread().getStackTrace()[1].getMethodName() 

包含最后一个方法调用,但不短于

new Object() {}.getClass().getEnclosingMethod().getName

我不知道有一种分拣机方法来做到这一点。

于 2012-11-28T16:19:21.763 回答
3

您可以使用thread.currentThread().getStacktrace()[0].getMethodName(). 但这甚至需要更多的时间new Throwable().getStacktrace()(参见http://alexradzin.blogspot.co.il/2011/12/how-slow-getstacktrace-is.html

于 2012-11-28T16:20:12.707 回答