Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Java

StackWalker API ใน Java 9

StackWalker API

StackWalker API ใน Java 9 ให้การเข้าถึง stack trace information แบบ lazy และ filterable มีประสิทธิภาพกว่า StackTraceElement แบบเดิม

คลาสหลัก 3 ตัว

  • StackWalker - คลาสหลัก ใช้ forEach(), getCallerClass(), walk()
  • StackWalker.StackFrame - nested class แทน method invocation มี getDeclaringClass(), getLineNumber() ฯลฯ
  • StackWalker.Option - nested class กำหนด options ตอนสร้าง instance ด้วย 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());
        }
    }
}

Output

StackWalkingTest::main:6

ข้อดีของ StackWalker

  • Lazy evaluation: ไม่ capture full stack trace ทันที ประหยัด performance
  • Filterable: กรอง frame ที่ต้องการได้
  • Stream-based: ใช้ Stream API ประมวลผลได้
  • Caller class: หา caller class ได้แม่นยำด้วย getCallerClass()

สรุป

StackWalker API เป็นทางเลือกที่ทันสมัยและมีประสิทธิภาพสำหรับ stack walking ใน Java 9+ แทน Thread.getStackTrace()