首頁 > Java > java教程 > 如何在Java 9中跳過StackFrame中的某些類別?

如何在Java 9中跳過StackFrame中的某些類別?

WBOY
發布: 2023-09-19 09:13:04
轉載
569 人瀏覽過

如何在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
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板