Leniwa inspekcja stosu za pomocą StackWalker
Przeglądaj ramki stosu leniwie za pomocą StackWalker zamiast materializować pełny ślad stosu.
Porównanie kodu
✕ Materialized stack trace
StackTraceElement caller = Thread.currentThread()
.getStackTrace()[2];
String callerClass = caller.getClassName();
✓ Java 9+
String callerClass = StackWalker.getInstance()
.walk(frames -> frames.skip(1)
.findFirst()
.orElseThrow()
.getClassName());
Widzisz problem z tym kodem? Daj nam znać.
Dlaczego nowoczesne podejście wygrywa
Leniwe przechodzenie
Odwiedza tylko ramki potrzebne danej operacji.
Przyjazne dla strumieni
Filtrowanie i wybór korzystają ze standardowych operacji strumieniowych.
Konfigurowalność
Opcje zapewniają obsługę referencji do klas oraz ramek ukrytych i refleksyjnych.
Stare podejście
Thread.getStackTrace()
Nowoczesne podejście
StackWalker
Od JDK
9
Poziom trudności
Średniozaawansowany
Wsparcie JDK
Leniwa inspekcja stosu za pomocą StackWalker
Dostępne
Szeroko dostępne od JDK 9 (wrzesień 2017)
Jak to działa
StackWalker udostępnia leniwy strumień ramek stosu i konfigurowalny dostęp do zachowanych referencji do klas. Kod może zakończyć działanie po znalezieniu potrzebnej ramki, zamiast alokować całą tablicę śladu stosu.
Powiązana dokumentacja
Dowód