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

Comment ignorer certaines classes dans StackFrame en Java 9 ?

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
Libérer: 2023-09-19 09:13:04
avant
617 Les gens l'ont consulté

如何在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();
      }
   }
}
Copier après la connexion

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>
Copier après la connexion

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 de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal