Java 9为延迟访问提供了一种有效的堆栈遍历方式,使用StackWalker API过滤堆栈跟踪。StackWalker的对象可以允许我们遍历和访问堆栈。此类包含一些有用的方法,例如walk(),forEach()和getCallerClass()。
getCallerClass()方法返回的类调用调用此方法的方法。为了掌握调用类的实例,我们在获取StackWalker实例时需要RETAIN_CLASS_REFERENCE。RETAIN_CLASS_REFERENCE保留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