用于动态获取当前方法名称的较短方法

时间:2012-11-28 16:14:30

标签: java

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

以下是我们现在所做的事情:

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

3 个答案:

答案 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

需要更多时间