Java 9 中的 StackWalker API?


StackWalker API允許輕鬆過濾和延遲訪問以在任何方法中執行任務。它是Java 9中獲取堆疊跟蹤資訊的有效API。

StackWalker API中有三個重要的新的類:StackWalkerStackWalker.StackFrameStackWalker.Option

StackWalker - 它是StackWalker API中的主要類。我們使用StackWalker.forEach()方法遍歷堆疊幀,並透過呼叫StackWalker.getCallerClass()方法以有效的方式獲取呼叫者類。我們使用StackWalker.walk()方法遍歷堆疊跟蹤並在堆疊幀流上應用函式。

StackWalker.StackFrame - 它是StackWalker的靜態巢狀類,表示由StackWalker返回的方法呼叫。它具有訪問給定堆疊幀資訊的方法,例如getDeclaringClass()getLineNumber()等。

StackWalker.Option - 它是StackWalker的靜態巢狀類,當我們透過StackWalker.getInstance()建立例項時,它為堆疊步行者提供配置堆疊幀資訊的選項。

示例

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

更新於:2020年2月24日

640 次瀏覽

啟動您的職業生涯

完成課程獲得認證

開始
廣告