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

dav*_*nes 11 java

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

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

new Object() {}.getClass().getEnclosingMethod().getName(
Run Code Online (Sandbox Code Playgroud)

NPE*_*NPE 17

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

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

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

public static String getMethodName() {
    return Thread.currentThread().getStackTrace()[2].getMethodName();
} 
Run Code Online (Sandbox Code Playgroud)


dre*_*ash 6

你也可以使用

Thread.currentThread().getStackTrace()[1].getMethodName() 
Run Code Online (Sandbox Code Playgroud)

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

new Object() {}.getClass().getEnclosingMethod().getName
Run Code Online (Sandbox Code Playgroud)

我不知道分拣机的方法.

  • `new Object()...`方法带有*显着*开销,请参见此处:http://stackoverflow.com/a/5891326/210368 (2认同)