获取调用者类和方法名称

seb*_*ebi 5 java reflection scala logback

我试图在Scala应用程序的函数内获取调用者类和方法名称.我目前正在使用堆栈跟踪,但性能已降低.我正在做类似的事情

stackTrace(CodeDepth).getClassName
stackTrace(CodeDepth).getMethodName
Run Code Online (Sandbox Code Playgroud)

我发现Java反射更快,但我只能得到类名

sun.reflect.Reflection.getCallerClass(CodeDepth).getName()
Run Code Online (Sandbox Code Playgroud)

有没有办法通过反射获取方法名称(和可选的行号)?也许使用Scala的反思?

谢谢

Ale*_*nov 4

不幸的是,没有一种昂贵的方法可以做到这一点。有一个Java 增强提案来添加更好的替代方案,但这并没有帮助,除非您可以等到 Java 9(而且无论如何也不保证包含它)。

另一方面,这真的是您代码中的热点吗?仅当在循环中调用它时,这才有意义,在这种情况下,您可能可以调用它一次并缓存结果。