Java 9中的StackWalker API?

StackWalker  API 允许轻松过滤和延迟访问以执行任何方法中的任务。它是用于获取Java 9中的堆栈跟踪信息的有效API 。

StackWalker API中新增了三个重要的类:StackWalker StackWalker.StackFrameStackWalker.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