Inspeção preguiçosa da pilha com StackWalker
Inspecione frames da pilha de forma preguiçosa com StackWalker em vez de materializar um stack trace completo.
Comparação de Código
✕ 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());
Viu um problema com este código? Nos avise.
Por que a forma moderna ganha
Percurso preguiçoso
Visita apenas os frames necessários para a operação.
Compatível com streams
Filtragem e seleção usam operações padrão de stream.
Configurável
As opções oferecem suporte a referências de classe e frames ocultos ou reflexivos.
Abordagem Antiga
Thread.getStackTrace()
Abordagem Moderna
StackWalker
Desde o JDK
9
Dificuldade
Intermediário
Suporte JDK
Inspeção preguiçosa da pilha com StackWalker
Disponível
Amplamente disponível desde o JDK 9 (setembro de 2017)
Como funciona
StackWalker expõe um stream preguiçoso de frames da pilha e acesso configurável a referências de classe retidas. O código pode parar assim que encontrar o frame necessário, em vez de alocar um array completo de stack trace.
Documentação Relacionada
Prova