StackWalker API cho phép lọc dễ dàng và truy cập lười (lazy access) để thực thi tác vụ trong bất kỳ phương thức nào. Đây là API hiệu quả để lấy thông息 stack trace trong Java 9.
Có 3 lớp quan trọng mới trong StackWalker API: StackWalker, StackWalker.StackFrame và StackWalker.Option.
- StackWalker: Lớp chính trong API. Duyệt stack frame bằng StackWalker.forEach(), lấy caller class hiệu quả bằng StackWalker.getCallerClass(). Duyệt stack trace và áp dụng hàm trên stream stack frame bằng StackWalker.walk().
- StackWalker.StackFrame: Lớp lồng tĩnh (static nested class) của StackWalker, biểu diễn invocation phương thức trả về bởi StackWalker. Có phương thức truy cập thông tin stack frame như getDeclaringClass(), getLineNumber(), v.v.
- StackWalker.Option: Lớp lồng tĩnh của StackWalker, cung cấp tùy chọn cấu hình thông tin stack frame khi tạo instance qua StackWalker.getInstance().
Ví dụ
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());
}
}
}
Kết quả
StackWalkingTest::main:6