StackWalkerAPI fournit le flux d'informations dans les traces de pile pendant l'exécution du programme. Cette API nécessite unemachine virtuellepour capturer un instantané de l'ensemble de la pile et renvoyer un tableau d'éléments à des fins de filtrage. Nous devons utiliser la méthodewalk()pour ignorer, supprimer et limiter les frames de la pile. Nous pouvons également filtrer les frames de pile par classe en utilisant la méthodefilter()pour obtenir le premier frame correspondant ainsi que tous les frames correspondants.
Dans l'exemple ci-dessous, nous pouvons utiliser l'API StackWalker pour filtrer les frames de pile.
import java.lang.StackWalker.StackFrame; import java.util.*; import java.util.stream.*; public class StackWalkerFilterTest { public static void main(String args[]) { final ListfilterClasses = new ArrayList<>(); filterClasses.add(StackWalkerFilterTest.class); System.out.println("--- filter Frame by Class >> get first matching frame ---"); Optional frameByClass = findFrameByClass(filterClasses); System.out.println(frameByClass.toString()); System.out.println("--- filter Frame by Class >> get all matching frames ---"); List framesByClass = findAllFramesByClass(filterClasses); System.out.println(framesByClass); } private static Optional findFrameByClass(List filterClasses) { return StackWalker.getInstance(StackWalker.Option.RETAIN_CLASS_REFERENCE) .walk(s -> s.filter(f -> filterClasses.contains(f.getDeclaringClass())).findFirst()); } private static List findAllFramesByClass(List filterClasses) { return StackWalker.getInstance(StackWalker.Option.RETAIN_CLASS_REFERENCE).walk( s -> s.filter(f -> filterClasses.contains(f.getDeclaringClass())).collect(Collectors.toList())); } }
--- 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)]
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!