Java 9 นำเสนอ StackWalker API ซึ่งเป็นวิธีการเดินสแต็ก (stack walking) ที่มีประสิทธิภาพสำหรับการเข้าถึงแบบ Lazy การกรองสแต็กทрейส คลาส StackWalker ช่วยให้เราสามารถวิ่งไปดูและเข้าถึงสแต็กได้ มีเมธอดที่มีประโยชน์อย่าง walk() forEach() และ getCallerClass()
เมธอด getCallerClass() จะคืนค่าคลาสที่เรียกใช้เมธอดที่เรียกใช้เมธอดนี้ (caller of the caller) เพื่อให้ได้อินสแตนซ์ของคลาสที่เรียก เราต้องระบุ RETAIN_CLASS_REFERENCE ขณะสร้างอินสแตนซ์ StackWalker ตัวเลือกนี้จะเก็บอินสแตนซ์ของคลาสทั้งหมดที่ StackWalker เดินผ่านไว้
ไวยากรณ์
public Class<?> getCallerClass()
ตัวอย่างการใช้งาน
import java.lang.StackWalker.Option;
public class StackWalkerTest {
public static void main(String args[]) {
StackWalkerTest1.test1();
}
}
class StackWalkerTest1 {
protected static void test1() {
StackWalkerTest2.test2();
}
}
class StackWalkerTest2 {
protected static void test2() {
System.out.println(
StackWalker.getInstance(Option.RETAIN_CLASS_REFERENCE).getCallerClass()
);
}
}
ผลลัพธ์
class StackWalkerTest1
ในตัวอย่างนี้ StackWalkerTest2.test2() เรียก getCallerClass() ซึ่งจะคืนค่าคลาสที่เรียก test2() คือ StackWalkerTest1