首页 > Java > java教程 > 正文

如何在Java 9中跳过StackFrame中的某些类?

WBOY
发布: 2023-09-19 09:13:04
转载
489 人浏览过

如何在Java 9中跳过StackFrame中的某些类?

StackWalker API 已在 Java 9 中引入,它提供当前线程在任意给定点的堆栈跟踪快照时间并有方法走过它。与 Thread::getStackTrace() 相比,使用 StackWalker 类的优点是可以过滤跳过某些类并获取声明该类本身的实例并获取短堆栈跟踪或完整堆栈跟踪,而不是提取完整的堆栈跟踪本身。

在下面的示例中,我们可以使用 java.util.stream.Stream.skip()

strong> 跳过堆栈帧的方法。

示例

import java.lang.StackWalker.*;
import java.util.Optional;
import java.util.List;
import java.util.stream.Collectors;
import java.lang.StackWalker.StackFrame;

public class StackWalkerSkipTest {
   public static void main(String args[]) {
      new StackWalkerSkipTest().stackWalk();
   }
   private class StackWalker4 {
      public void stackWalk4() {
      <strong>List<StackFrame></strong> framesAfterSkip = StackWalker.getInstance(<strong>StackWalker.Option.RETAIN_CLASS_REFERENCE</strong>).walk((s) ->
s.<strong>skip</strong>(2).collect(<strong>Collectors.toList()</strong>));
      System.out.println("Frames after skip : \n" + framesAfterSkip.toString());
   }
}
   public void stackWalk() {
      new StackWalker1().stackWalk1();
   }
   private class StackWalker1 {
      public void stackWalk1() {
         new StackWalker2().stackWalk2();
      }
   }
   private class StackWalker2 {
      public void stackWalk2() {
         new StackWalker3().stackWalk3();
      }
   }
   private class StackWalker3 {
      public void stackWalk3() {
         new StackWalker4().stackWalk4();
      }
   }
}
登录后复制

输出

<strong>Frames after skip :
[StackWalkerSkipTest$StackWalker2.stackWalk2(StackWalkerSkipTest.java:29),
StackWalkerSkipTest$StackWalker1.stackWalk1(StackWalkerSkipTest.java:24),
StackWalkerSkipTest.stackWalk(StackWalkerSkipTest.java:19),
StackWalkerSkipTest.main(StackWalkerSkipTest.java:9)]</strong>
登录后复制

以上是如何在Java 9中跳过StackFrame中的某些类?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:tutorialspoint.com
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!