我试图在Scala应用程序的函数中获取调用者类和方法名称。我目前正在使用堆栈跟踪,但性能已降低。我正在做类似
的事情stackTrace(CodeDepth).getClassName
stackTrace(CodeDepth).getMethodName
我发现Java反射速度要快得多,但我只能用
获取类名sun.reflect.Reflection.getCallerClass(CodeDepth).getName()
有没有办法通过反射获取方法名称(以及可选的行号)?也许使用Scala的反思?
由于
答案 0 :(得分:4)
不幸的是,没有非 - 昂贵的方法来执行此操作。有一个Java Enhancement Proposal可以添加更好的替代方案,但除非您可以等到Java 9(并且无论如何也不保证包含它),否则这无济于事。
另一方面,这真的是你代码中的热点吗?这应该只要它在循环中被调用,在这种情况下你可能会调用它一次并缓存结果。
答案 1 :(得分:0)
对于Scala,您只需使用https://github.com/lihaoyi/sourcecode中的源代码库,然后执行以下操作:
this.loaderService.loaderShown$.subscribe(shown => {
this.loaderShown = shown;
}, (err) => console.log(err));