有没有比解析堆栈跟踪以获取当前 运行 或调用方法更好的方法?

Is there a better way than parsing a stack trace to get the currently running or calling method?

历史方法一直是解析 Thread.currentThread().getStackTrace() 的输出,但自 Java 8 以来发生了很多变化(如方法句柄),我不确定是否有更好的方法现在存在。

如果有帮助,我的具体目标是尽可能根据调用方法上的注释进行操作。

Java9介绍了StackWalkerAPI

最佳做法是将 StackWalker 实例存储在私有静态最终字段中:

class SomeClass {
    private static final StackWalker SW = StackWalker.getInstance(StackWalker.Option.RETAIN_CLASS_REFERENCE);

    public someCallerSensitiveMethod() {
        Class<?> caller = SW.getCallerClass();
        // Do something with it, like check it's annotations
    }
}