什么时候可以在Java 9中使用StackWalker.getCallerClass()方法?

Java 9为延迟访问提供了一种有效的堆栈遍历方式,使用StackWalker API过滤堆栈跟踪StackWalker的对象可以允许我们遍历和访问堆栈。此类包含一些有用的方法,例如walk()forEach()getCallerClass()

getCallerClass()方法返回的类调用调用此方法的方法。为了掌握调用类的实例,我们在获取StackWalker实例时需要RETAIN_CLASS_REFERENCERETAIN_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