StackWalker ile tembel çağrı yığını incelemesi
Tam bir yığın izini bellekte oluşturmadan, yığın çerçevelerini StackWalker ile tembel olarak inceleyin.
Kod Karşılaştırması
✕ 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());
Bu kodda bir sorun mu gördünüz? Bize bildirin.
Modern yöntem neden daha iyi
Tembel dolaşım
Yalnızca işlemin gerektirdiği çerçeveleri ziyaret eder.
Stream uyumlu
Filtreleme ve seçim standart stream işlemlerini kullanır.
Yapılandırılabilir
Seçenekler sınıf referanslarını ve gizli ya da yansıtıcı çerçeveleri destekler.
Eski Yaklaşım
Thread.getStackTrace()
Modern Yaklaşım
StackWalker
JDK'dan itibaren
9
Zorluk
Orta
JDK Desteği
StackWalker ile tembel çağrı yığını incelemesi
Mevcut
JDK 9'dan (Eylül 2017) itibaren geniş çapta kullanılabilir
Nasıl çalışır
StackWalker, yığın çerçevelerinden oluşan tembel bir stream ve tutulan sınıf referanslarına yapılandırılabilir erişim sunar. Kod, çağrı yığını izinin tamamını içeren bir dizi ayırmak yerine gereken çerçeveyi bulduğunda durabilir.
İlgili Belgeler
Kanıt