StackWalkerAPI允许轻松过滤和延迟访问以执行任何方法中的任务。它是用于获取Java 9中的堆栈跟踪信息的有效API 。
StackWalker API中新增了三个重要的类:StackWalker,StackWalker.StackFrame和StackWalker.Option。
StackWalker-它是在主类StackWalkerAPI。我们使用StackWalker.forEach()方法遍历堆栈帧,并通过调用StackWalker.getCallerClass()方法以高效的方式获取调用者类。我们遍历堆栈跟踪,并通过使用StackWalker.walk()方法在堆栈帧流上应用函数。
StackWalker.StackFrame-这是一个静态的嵌套类StackWalker的方式,为StackWalker方法调用的返回。它具有访问给定堆栈帧信息的方法,如getDeclaringClass(),getLineNumber()等。
StackWalker.Option-这是StackWalker的静态嵌套类,当我们通过SackWalker.getInstance()创建实例时,它为堆栈walker提供选项以配置堆栈帧信息。
示例import java.util.List;
import java.util.stream.Collectors;
public class StackWalkingTest {
public static void main(String args[]) {
final List stack = StackWalker.getInstance() .walk(s -> s.collect(Collectors.toList()));
for(StackWalker.StackFrame sf : stack) {
System.out.println(sf.getClassName() + "::" + sf.getMethodName() + ":" + sf.getLineNumber());
}
}
}
输出结果StackWalkingTest::main:6