【发布时间】:2012-11-16 13:35:04
【问题描述】:
我正在寻找一种无需创建空白对象即可获取当前方法名称的方法。有没有办法做到这一点?这将整理我们的日志记录代码。
这是我们现在要做的:
new Object() {}.getClass().getEnclosingMethod().getName(
【问题讨论】:
标签: java
我正在寻找一种无需创建空白对象即可获取当前方法名称的方法。有没有办法做到这一点?这将整理我们的日志记录代码。
这是我们现在要做的:
new Object() {}.getClass().getEnclosingMethod().getName(
【问题讨论】:
标签: java
Thread.currentThread().getStackTrace()[1]怎么样?
由于这使您能够检查更高级别的堆栈跟踪,您可以轻松地将其包装在辅助方法中(见下文)。它还为您提供了获取更多信息的选项,而不仅仅是方法名称,例如文件名、行号等。
edit 辅助方法可能看起来像这样(感谢@Esailija):
public static String getMethodName() {
return Thread.currentThread().getStackTrace()[2].getMethodName();
}
【讨论】:
public static String methodName() { 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)
【讨论】: