- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用
new Throwable().getStackTrace()[1].getMethodName()
一些开发人员认为它价格昂贵。这种方法的成本在哪里?我们应该使用它吗?如果是,那么应该注意什么?
在我的用例中,非常需要找到调用方法名称。
大约有 50 个作业,因此这将在 Java8 中的独立程序中在 32 GB ram centos 上执行大约 100 次。
最佳答案
可以获取方法名statically ,无需创建额外的 Throwable
对象
Thread.currentThread().getStackTrace()[1].getMethodName()
感谢@RiteshPuj
通知getStackTrace
internally仍然创建对象(Exception
或 Thread[]
)
StackTraceElement[][] stackTraceArray = dumpThreads(new Thread[] {this});
...
} else {
// Don't need JVM help for current thread
return (new Exception()).getStackTrace();
对于 Java 9+,请使用 StackWalker
(感谢 @StuartMarks)
public void methodB(){
System.out.println("I am methodB");
StackWalker.getInstance()
.walk(frames -> frames.skip(1).findFirst())
.ifPresent(frame -> {
System.out.println("I was called by a method named: " + frame.getMethodName());
});
}
关于java - 为什么使用 "new Throwable().getStackTrace()[1].getMethodName()"获取结果被称为昂贵?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59665820/
有点不正统的情况 - 基本上我有线程 A 监视线程 B。如果线程 A 检测到线程 B 负责的周期性任务之一(线程 B 不是 ThreadPoolExecutor 的一部分,它是MINA 的线程之一)已
在一个日志系统中,每条日志的输出都是由一个辅助类用这样的方法完成的 public void debug(String message) { Logger logger = Logger.get
使用 Delphi 7,如何从 Exception 中获取表示堆栈跟踪的字符串? try SomethingDodgy(); except on E:Exception do begin
我无法理解这段代码。我很了解语法,但为什么使用 getStackTrace() 和 setStackTrace() ?我的意思是我想知道它在现实世界场景中的实现是什么?即,这段代码的期望输出是什么?
出于日志记录的目的,我创建了一个方法 logTitle(),它打印出 TestNG 测试的调用方法名称。示例代码如下。 @Test public void test1() throws Excepti
本文整理了Java中org.jboss.wsf.spi.WSFException.getStackTrace()方法的一些代码示例,展示了WSFException.getStackTrace()的具体
我目前正在尝试为包验证方法编写 JUnit4 测试。 该方法只是检查调用是否来自正确的包,以确保它不是从外部调用的。方法和RegEx本身可以工作,但是为了安全起见,我想添加一个单元测试。 简单来说,这
这是对 What happens when there's insufficient memory to throw an OutOfMemoryError? 的后续问题 我的问题如下:如果预先分配了
我正在使用 new Throwable().getStackTrace()[1].getMethodName() 一些开发人员认为它价格昂贵。这种方法的成本在哪里?我们应该使用它吗?如果是,那么应该注
我正在使用较旧的 Java 版本进行开发,该版本没有 getStackTrace() 方法。有一个 printStackTrace 方法,但它没有打印在我想要的地方。 有没有办法提取Exception
我是一名优秀的程序员,十分优秀!