ホームページ  >  記事  >  Java  >  Java 9 の StackFrame で特定のクラスをスキップするにはどうすればよいですか?

Java 9 の StackFrame で特定のクラスをスキップするにはどうすればよいですか?

WBOY
WBOY転載
2023-09-19 09:13:04490ブラウズ

如何在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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はtutorialspoint.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。