Maison  >  Article  >  Java  >  Comment ignorer certaines classes dans StackFrame en Java 9 ?

Comment ignorer certaines classes dans StackFrame en Java 9 ?

WBOY
WBOYavant
2023-09-19 09:13:04523parcourir

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

APIStackWalker Introduit dans Java 9, il fournit un instantané de trace de pile du thread actuel à un moment donné et dispose de méthodes pour le parcourir. L'avantage d'utiliser la classe StackWalker par rapport à Thread::getStackTrace() est que vous pouvez filtrer ou ignorer certaines classes et obtenir l'instance où la classe elle-même est déclarée et obtenir une trace de pile courte ou une trace de pile complète à la place d'extraire la trace complète de la pile elle-même.

Dans l'exemple ci-dessous, nous pouvons utiliser la méthode java.util.stream.Stream.skip()

strong> pour ignorer les frames de pile.

Exemple

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();
      }
   }
}

Sortie

<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>

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer