StackWalker API ช่วยให้การกรองที่ง่ายและการเข้าถึงแบบสันหลังยาวเพื่อดำเนินการงานด้วยวิธีการใดก็ได้ เป็น API ที่มีประสิทธิภาพในการรับข้อมูลการติดตามสแต็กใน Java 9 .
มีสามคลาสที่สำคัญใหม่ใน 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 และให้ตัวเลือกสำหรับ stack walker เพื่อกำหนดค่าข้อมูล stack frame เมื่อเราสร้างอินสแตนซ์ผ่าน SackWalker.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