有没有比解析堆栈跟踪以获取当前 运行 或调用方法更好的方法?
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
}
}
历史方法一直是解析 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
}
}