Lazy Stack-Inspektion mit StackWalker
Stack-Frames mit StackWalker lazy untersuchen, statt einen vollständigen Stacktrace zu materialisieren.
Code-Vergleich
✕ 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());
Problem mit diesem Code entdeckt? Sag uns Bescheid.
Warum der moderne Weg gewinnt
Lazy Traversierung
Besucht nur die Frames, die die Operation benötigt.
Stream-freundlich
Filtern und Auswählen verwenden Standard-Stream-Operationen.
Konfigurierbar
Optionen unterstützen Klassenreferenzen sowie verborgene oder reflektive Frames.
Alter Ansatz
Thread.getStackTrace()
Moderner Ansatz
StackWalker
Seit JDK
9
Schwierigkeitsgrad
Fortgeschritten
JDK-Unterstützung
Lazy Stack-Inspektion mit StackWalker
Verfügbar
Weitgehend verfügbar seit JDK 9 (September 2017)
Wie es funktioniert
StackWalker stellt einen lazy Stream von Stack-Frames sowie konfigurierbaren Zugriff auf beibehaltene Klassenreferenzen bereit. Code kann anhalten, sobald der benötigte Frame gefunden wurde, statt ein vollständiges Stacktrace-Array zu allozieren.
Zugehörige Dokumentation
Beweis