StackWalker API 允许轻松过滤和延迟访问以执行任何方法中的任务。它是用于获取Java 9中的堆栈跟踪信息的有效API 。
StackWalker API中新增了三个重要的类:StackWalker, StackWalker.StackFrame和StackWalker.Option。
StackWalker -它是在主类StackWalker API。我们使用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<StackWalker.StackFrame> 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