Tooling 中級

完全なスタックトレースを実体化する代わりに、StackWalkerでスタックフレームを遅延検査する。

✕ 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());
このコードに問題がありますか? お知らせください。

遅延走査

操作に必要なフレームだけを走査します。

🧩

ストリームとの親和性

標準ストリーム操作でフィルタリングと選択を行えます。

🎛

設定可能

オプションにより、クラス参照、隠しフレーム、リフレクションフレームを扱えます。

旧来のアプローチ
Thread.getStackTrace()
モダンなアプローチ
StackWalker
JDKバージョン
9
難易度
中級
StackWalkerによる遅延スタック検査
利用可能

JDK 9(2017年9月)以降、広く利用可能

StackWalkerはスタックフレームの遅延ストリームと、保持されたクラス参照への設定可能なアクセスを提供します。スタックトレース配列全体を割り当てる代わりに、必要なフレームが見つかった時点で処理を停止できます。