StackWalker API Java 9에 도입된 이 API는 특정 시점의 현재 스레드에 대한 스택 추적 스냅샷을 제공하고 이를 살펴보는 메서드를 제공합니다. 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!