首页 > 文章列表 > Java 9中的StackWalker API?

Java 9中的StackWalker API?

482 2023-09-06

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 -< /strong> 它是 StackWalker 的一个静态嵌套类,当我们通过 SackWalker.getInstance() 创建实例时,为 stack 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