Heim > Java > javaLernprogramm > Wie filtere ich Stapelrahmen mithilfe der StackWalker-API in Java 9?

Wie filtere ich Stapelrahmen mithilfe der StackWalker-API in Java 9?

WBOY
Freigeben: 2023-09-14 18:25:02
nach vorne
819 Leute haben es durchsucht

如何在Java 9中使用StackWalker API过滤堆栈帧?

StackWalkerAPI sorgt für den Informationsfluss in Stack-Traces während der Programmausführung. Diese API erfordert eine „virtuelle Maschine“, um einen Schnappschuss des gesamten Stapels zu erfassen und ein Array von Elementen zu Filterzwecken zurückzugeben. Wir müssen die Methode walk() verwenden, um Stapelrahmen zu überspringen, zu löschen und zu begrenzen. Wir können die Stack-Frames auch nach Klasse filtern, indem wir die Methode filter() verwenden, um den ersten passenden Frame sowie alle passenden Frames zu erhalten. Im folgenden Beispiel können wir die StackWalker-API verwenden, um Stapelrahmen zu filtern.

Beispiel

import java.lang.StackWalker.StackFrame;
import java.util.*;
import java.util.stream.*;

public class StackWalkerFilterTest {
   public static void main(String args[]) {
      final <strong>List<Class></strong> filterClasses = new ArrayList<>();
      filterClasses.add(StackWalkerFilterTest.class);

      System.out.println("--- filter Frame by Class >> get first matching frame ---");
      <strong>Optional<StackFrame></strong> frameByClass = findFrameByClass(filterClasses);
      System.out.println(frameByClass.toString());

      System.out.println("--- filter Frame by Class >> get all matching frames ---");
      <strong>List<StackFrame></strong> framesByClass = findAllFramesByClass(filterClasses);
      System.out.println(framesByClass);
   }
   private static Optional<StackFrame> findFrameByClass(List<Class> filterClasses) {
      return <strong>StackWalker.getInstance</strong>(StackWalker.Option.<strong>RETAIN_CLASS_REFERENCE</strong>)
.<strong>walk</strong>(s -> s.<strong>filter</strong>(f -> filterClasses.contains(f.getDeclaringClass())).<strong>findFirst()</strong>);
   }
   private static List<StackFrame> findAllFramesByClass(List<Class> filterClasses) {
      return StackWalker.getInstance(StackWalker.Option.<strong>RETAIN_CLASS_REFERENCE</strong>).<strong>walk</strong>(
s -> s.<strong>filter</strong>(f -> filterClasses.contains(f.getDeclaringClass())).<strong>collect</strong>(Collectors.toList()));
   }
}
Nach dem Login kopieren

Ausgabe

<strong>--- filter Frame by Class >> get first matching frame ---
Optional[StackWalkerTest.findFrameByClass(StackWalkerTest.java:20)]
--- filter Frame by Class >> get all matching frames ---
[StackWalkerTest.findAllFramesByClass(StackWalkerTest.java:23), StackWalkerTest2.main(StackWalkerTest.java:15)]</strong>
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie filtere ich Stapelrahmen mithilfe der StackWalker-API in Java 9?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:tutorialspoint.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage