Ispezione lazy dello stack con StackWalker
Ispeziona i frame dello stack in modo lazy con StackWalker invece di materializzare uno stack trace completo.
Confronto Codice
✕ 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());
Vedi un problema con questo codice? Faccelo sapere.
Perché vince l'approccio moderno
Attraversamento lazy
Visita solo i frame necessari all'operazione.
Compatibile con gli stream
Il filtraggio e la selezione usano le operazioni standard degli stream.
Configurabile
Le opzioni supportano riferimenti alle classi e frame nascosti o riflessivi.
Approccio Vecchio
Thread.getStackTrace()
Approccio Moderno
StackWalker
Dal JDK
9
Difficoltà
Intermedio
Supporto JDK
Ispezione lazy dello stack con StackWalker
Disponibile
Ampiamente disponibile dal JDK 9 (settembre 2017)
Come funziona
StackWalker espone uno stream lazy di frame dello stack e un accesso configurabile ai riferimenti alle classi conservati. Il codice può fermarsi non appena trova il frame necessario, anziché allocare un intero array di stack trace.
Documentazione Correlata
Prova