- 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/
我正在运行一些 Selenium 测试,但无法访问我的测试方法的名称。我想在日志中打印一些内容,例如“开始测试:foobarbaz” 我的所有测试类都继承一个公共(public)“AbstractTe
出于日志记录的目的,我创建了一个方法 logTitle(),它打印出 TestNG 测试的调用方法名称。示例代码如下。 @Test public void test1() throws Excepti
本文整理了Java中org.apache.xmlrpc.parser.XmlRpcRequestParser.getMethodName()方法的一些代码示例,展示了XmlRpcRequestPars
我正在使用 new Throwable().getStackTrace()[1].getMethodName() 一些开发人员认为它价格昂贵。这种方法的成本在哪里?我们应该使用它吗?如果是,那么应该注
我是一名优秀的程序员,十分优秀!