クラスStackWalker

java.lang.Object
java.lang.StackWalker

public final class StackWalker extends Object
スタック・ウォーカ。

walkメソッドã¯ã€ç¾åœ¨ã®ã‚¹ãƒ¬ãƒƒãƒ‰ã«å¯¾ã—ã¦StackFrameã®é †æ¬¡ã‚¹ãƒˆãƒªãƒ¼ãƒ ã‚’é–‹ãã€æŒ‡å®šã•れãŸé–¢æ•°ã‚’é©ç”¨ã—ã¦StackFrameストリームを調査ã—ã¾ã™ã€‚ ストリームã¯ã€ã‚¹ã‚¿ãƒƒã‚¯ãŒç”Ÿæˆã•れãŸå®Ÿè¡Œãƒã‚¤ãƒ³ãƒˆã‚’è¡¨ã™æœ€ä¸Šä½ã®ãƒ•レームã‹ã‚‰æœ€ä¸‹ä½ã®ãƒ•レームã¾ã§ã€ã‚¹ã‚¿ãƒƒã‚¯ãƒ»ãƒ•レームè¦ç´ ã‚’順番ã«ãƒ¬ãƒãƒ¼ãƒˆã—ã¾ã™ã€‚ walkãƒ¡ã‚½ãƒƒãƒ‰ãŒæˆ»ã‚‹ã¨ã€StackFrameストリームã¯é–‰ã˜ã‚‰ã‚Œã¾ã™ã€‚ クローズã—ãŸã‚¹ãƒˆãƒªãƒ¼ãƒ ã‚’å†åˆ©ç”¨ã—よã†ã¨ã™ã‚‹ã¨ã€IllegalStateExceptionãŒã‚¹ãƒ­ãƒ¼ã•れã¾ã™ã€‚

「スタック・ウォーカ・オプションã€ã¯ã€StackWalkerã«ã‚ˆã£ã¦å–å¾—ã•れるスタック・フレーム情報を構æˆã—ã¾ã™ã€‚ デフォルトã§ã¯ã€ã‚¯ãƒ©ã‚¹åã¨ãƒ¡ã‚½ãƒƒãƒ‰æƒ…å ±ã¯åŽé›†ã•れã¾ã™ãŒã€Class referenceã¯åŽé›†ã•れã¾ã›ã‚“。 メソッド情報ã¯ã€DROP_METHOD_INFOオプションを使用ã—ã¦å‰Šé™¤ã§ãã¾ã™ã€‚ Classオブジェクトã¯ã€RETAIN_CLASS_REFERENCEオプションを使用ã—ã¦ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ãŸã‚ã«ä¿æŒã§ãã¾ã™ã€‚ リフレクションAPIãŠã‚ˆã³å®Ÿè£…クラスã®ã‚¹ã‚¿ãƒƒã‚¯ãƒ»ãƒ•レームã¯ã€ãƒ‡ãƒ•ォルトã§ã¯hiddenã§ã™ã€‚

StackWalkerã¯ã‚¹ãƒ¬ãƒƒãƒ‰ãƒ»ã‚»ãƒ¼ãƒ•ã§ã™ã€‚ 複数ã®ã‚¹ãƒ¬ãƒƒãƒ‰ãŒå˜ä¸€ã®StackWalkerオブジェクトを共有ã—ã¦ã€ç‹¬è‡ªã®ã‚¹ã‚¿ãƒƒã‚¯ã‚’横断ã§ãã¾ã™ã€‚

APIã®ãƒŽãƒ¼ãƒˆ:
例

1. 最åˆã®å‘¼ã³å‡ºã—å…ƒãŒæ—¢çŸ¥ã®å®Ÿè£…クラスã®ãƒªã‚¹ãƒˆã‚’フィルタリングã—ã¦æ¤œç´¢ã™ã‚‹ã«ã¯:

    StackWalker walker = StackWalker.getInstance(Set.of(Option.DROP_METHOD_INFO, Option.RETAIN_CLASS_REFERENCE));
    Optional<Class<?>> callerClass = walker.walk(s ->
            s.map(StackFrame::getDeclaringClass)
             .filter(Predicate.not(implClasses::contains))
             .findFirst());

2. ç¾åœ¨ã®ã‚¹ãƒ¬ãƒƒãƒ‰ã®ä¸Šä½10スタック・フレームã®ã‚¹ãƒŠãƒƒãƒ—ショットを作æˆã™ã‚‹ã«ã¯ã€

    List<StackFrame> stack = StackWalker.getInstance().walk(s -> s.limit(10).toList());
ç‰¹ã«æ˜Žè¨˜ã—ãªã„ã‹ãŽã‚Šã€ã“ã®StackWalkerクラスã®ã‚³ãƒ³ã‚¹ãƒˆãƒ©ã‚¯ã‚¿ã¾ãŸã¯ãƒ¡ã‚½ãƒƒãƒ‰ã«null引数を渡ã™ã¨ã€NullPointerExceptionãŒã‚¹ãƒ­ãƒ¼ã•れã¾ã™ã€‚

å°Žå…¥ã•れãŸãƒãƒ¼ã‚¸ãƒ§ãƒ³:
9
  • ãƒã‚¹ãƒˆã•れãŸã‚¯ãƒ©ã‚¹ã®ã‚µãƒžãƒªãƒ¼

    ãƒã‚¹ãƒˆã•れãŸã‚¯ãƒ©ã‚¹
    修飾å­ã¨åž‹
    クラス
    説明
    static enum 
    StackWalkerã§å–å¾—ã—ãŸã€Œã‚¹ã‚¿ãƒƒã‚¯ãƒ»ãƒ•ãƒ¬ãƒ¼ãƒ ã€æƒ…報を構æˆã™ã‚‹ã‚ªãƒ—ション。
    static interface 
    StackFrameオブジェクトã¯ã€StackWalkerã«ã‚ˆã£ã¦è¿”ã•れるメソッド呼ã³å‡ºã—を表ã—ã¾ã™ã€‚
  • メソッドã®ã‚µãƒžãƒªãƒ¼

    修飾å­ã¨åž‹
    メソッド
    説明
    void
    ç¾åœ¨ã®ã‚¹ãƒ¬ãƒƒãƒ‰ã®StackFrameストリームã®å„è¦ç´ ã«å¯¾ã—ã¦ã€ã“ã®forEachメソッドをコールã™ã‚‹ãƒ¡ã‚½ãƒƒãƒ‰ã§ã‚るスタックã®ãƒˆãƒƒãƒ—・フレームã‹ã‚‰ç§»å‹•ã—ã¦ã€æŒ‡å®šã•れãŸã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã‚’実行ã—ã¾ã™ã€‚
    getCallerClassを呼ã³å‡ºã—ãŸãƒ¡ã‚½ãƒƒãƒ‰ã‚’呼ã³å‡ºã—ãŸå‘¼ã³å‡ºã—å…ƒã®Classオブジェクトをå–å¾—ã—ã¾ã™ã€‚
    StackWalkerインスタンスを返ã—ã¾ã™ã€‚
    アクセスå¯èƒ½ãªã‚¹ã‚¿ãƒƒã‚¯ãƒ»ãƒ•レーム情報を指定ã™ã‚‹ã€æŒ‡å®šã•れãŸã‚ªãƒ—ションを使用ã—ã¦StackWalkerインスタンスを返ã—ã¾ã™ã€‚
    アクセスå¯èƒ½ãªã‚¹ã‚¿ãƒƒã‚¯ãƒ»ãƒ•レーム情報を指定ã™ã‚‹ã€æŒ‡å®šã•れãŸoptionsã‚’æŒã¤StackWalkerインスタンスを返ã—ã¾ã™ã€‚
    getInstance(Set<StackWalker.Option> options, int estimateDepth)
    アクセスå¯èƒ½ãªã‚¹ã‚¿ãƒƒã‚¯ãƒ»ãƒ•レーム情報を指定ã™ã‚‹ã€æŒ‡å®šã•れãŸoptionsã‚’æŒã¤StackWalkerインスタンスを返ã—ã¾ã™ã€‚
    <T> T
    walk(Function<? super Stream<StackWalker.StackFrame>, ? extends T> function)
    指定ã•れãŸé–¢æ•°ã‚’ç¾åœ¨ã®ã‚¹ãƒ¬ãƒƒãƒ‰ã®StackFrameã®ã‚¹ãƒˆãƒªãƒ¼ãƒ ã«é©ç”¨ã—ã€ã‚¹ã‚¿ãƒƒã‚¯ã®ä¸Šéƒ¨ãƒ•レーム(ã“ã®walkメソッドをコールã™ã‚‹ãƒ¡ã‚½ãƒƒãƒ‰)ã‹ã‚‰ç§»å‹•ã—ã¾ã™ã€‚

    クラスjava.lang.Objectã§å®£è¨€ã•れãŸãƒ¡ã‚½ãƒƒãƒ‰

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • メソッドã®è©³ç´°

    • getInstance

      public static StackWalker getInstance()
      StackWalkerインスタンスを返ã—ã¾ã™ã€‚

      ã“ã®StackWalkerã¯ã€ã™ã¹ã¦ã®ã€Œéš ã—フレームã€ã‚’スキップã™ã‚‹ã‚ˆã†ã«æ§‹æˆã•れã¦ãŠã‚Šã€ã€Œã‚¯ãƒ©ã‚¹å‚ç…§ã€ã¯ä¿æŒã•れã¾ã›ã‚“。

      戻り値:
      ã™ã¹ã¦ã®ã€Œéš ã—フレームã€ã‚’スキップã™ã‚‹ã‚ˆã†ã«æ§‹æˆã•れãŸStackWalker。「クラスå‚ç…§ã€ã¯ä¿æŒã•れã¾ã›ã‚“。
    • getInstance

      public static StackWalker getInstance(StackWalker.Option option)
      アクセスå¯èƒ½ãªã‚¹ã‚¿ãƒƒã‚¯ãƒ»ãƒ•レーム情報を指定ã™ã‚‹ã€æŒ‡å®šã•れãŸã‚ªãƒ—ションを使用ã—ã¦StackWalkerインスタンスを返ã—ã¾ã™ã€‚
      パラメータ:
      option - stack walking option
      戻り値:
      指定ã•れãŸã‚ªãƒ—ã‚·ãƒ§ãƒ³ã§æ§‹æˆã•れãŸStackWalker
    • getInstance

      public static StackWalker getInstance(Set<StackWalker.Option> options)
      アクセスå¯èƒ½ãªã‚¹ã‚¿ãƒƒã‚¯ãƒ»ãƒ•レーム情報を指定ã™ã‚‹ã€æŒ‡å®šã•れãŸoptionsã‚’æŒã¤StackWalkerインスタンスを返ã—ã¾ã™ã€‚

      指定ã•れãŸoptionsãŒç©ºã®å ´åˆã€ã“ã®StackWalkerã¯ã™ã¹ã¦ã®ã€Œéš ã—フレームã€ã‚’スキップã™ã‚‹ã‚ˆã†ã«æ§‹æˆã•れã€ã€Œã‚¯ãƒ©ã‚¹å‚ç…§ã€ã¯ä¿æŒã•れã¾ã›ã‚“。

      パラメータ:
      options - stack walking options
      戻り値:
      指定ã•れãŸã‚ªãƒ—ã‚·ãƒ§ãƒ³ã§æ§‹æˆã•れãŸStackWalker
    • getInstance

      public static StackWalker getInstance(Set<StackWalker.Option> options, int estimateDepth)
      アクセスå¯èƒ½ãªã‚¹ã‚¿ãƒƒã‚¯ãƒ»ãƒ•レーム情報を指定ã™ã‚‹ã€æŒ‡å®šã•れãŸoptionsã‚’æŒã¤StackWalkerインスタンスを返ã—ã¾ã™ã€‚

      指定ã•れãŸoptionsãŒç©ºã®å ´åˆã€ã“ã®StackWalkerã¯ã™ã¹ã¦ã®ã€Œéš ã—フレームã€ã‚’スキップã™ã‚‹ã‚ˆã†ã«æ§‹æˆã•れã€ã€Œã‚¯ãƒ©ã‚¹å‚ç…§ã€ã¯ä¿æŒã•れã¾ã›ã‚“。

      estimateDepthã¯ã€StackWalkerãŒãƒãƒƒãƒ•ァ・サイズã®ãƒ’ントã¨ã—ã¦ä½¿ç”¨ã§ãã‚‹ã€ã“ã®StackWalkerãŒç§»å‹•ã™ã‚‹ã‚¹ã‚¿ãƒƒã‚¯ãƒ»ãƒ•レームã®è¦‹ç©ã‚Šæ•°ã‚’指定ã—ã¾ã™ã€‚

      パラメータ:
      options - stack walking options
      estimateDepth - トラãƒãƒ¼ã‚¹ã•ã‚Œã‚‹ã‚¹ã‚¿ãƒƒã‚¯ãƒ»ãƒ•ãƒ¬ãƒ¼ãƒ ã®æŽ¨å®šæ•°ã€‚
      戻り値:
      指定ã•れãŸã‚ªãƒ—ã‚·ãƒ§ãƒ³ã§æ§‹æˆã•れãŸStackWalker
      スロー:
      IllegalArgumentException - estimateDepth <= 0ã®å ´åˆ
    • walk

      public <T> T walk(Function<? super Stream<StackWalker.StackFrame>, ? extends T> function)
      指定ã•れãŸé–¢æ•°ã‚’ç¾åœ¨ã®ã‚¹ãƒ¬ãƒƒãƒ‰ã®StackFrameã®ã‚¹ãƒˆãƒªãƒ¼ãƒ ã«é©ç”¨ã—ã€ã‚¹ã‚¿ãƒƒã‚¯ã®ä¸Šéƒ¨ãƒ•レーム(ã“ã®walkメソッドをコールã™ã‚‹ãƒ¡ã‚½ãƒƒãƒ‰)ã‹ã‚‰ç§»å‹•ã—ã¾ã™ã€‚

      ã“ã®ãƒ¡ã‚½ãƒƒãƒ‰ãŒè¿”ã•れるã¨ã€StackFrameストリームãŒé–‰ã˜ã‚‰ã‚Œã¾ã™ã€‚ é–‰ã˜ãŸStream<StackFrame>オブジェクトãŒå†åˆ©ç”¨ã•れるã¨ã€IllegalStateExceptionãŒã‚¹ãƒ­ãƒ¼ã•れã¾ã™ã€‚

      APIã®ãƒŽãƒ¼ãƒˆ:
      ãŸã¨ãˆã°ã€æœ€åˆã®10個ã®å‘¼ã³å‡ºã—フレームを検索ã™ã‚‹ã«ã¯ã€æœ€åˆã«å®£è¨€ã‚¯ãƒ©ã‚¹ãŒãƒ‘ッケージcom.foo内ã«ã‚るフレームをスキップã—ã¾ã™:
      List<StackFrame> frames = StackWalker.getInstance().walk(s ->
              s.dropWhile(f -> f.getClassName().startsWith("com.foo."))
               .limit(10)
               .toList());
      

      ã“ã®ãƒ¡ã‚½ãƒƒãƒ‰ã¯ã€Stream<StackFrame>ã‚’è¿”ã—ã€å‘¼å‡ºã—å´ãŒã‚¹ãƒˆãƒªãƒ¼ãƒ ã‚’直接æ“作ã§ãるよã†ã«ã™ã‚‹ã®ã§ã¯ãªãã€Functionを使用ã—ã¦Stream<StackFrame>ã‚’å—ã‘入れã¾ã™ã€‚ Java仮想マシンã¯ã€ãŸã¨ãˆã°æœ€é©åŒ–解除ã«ã‚ˆã£ã¦ã€ã‚¹ãƒ¬ãƒƒãƒ‰ã®åˆ¶å¾¡ã‚¹ã‚¿ãƒƒã‚¯ã‚’自由ã«å†ç·¨æˆã§ãã¾ã™ã€‚ ã“ã®ãƒ¡ã‚½ãƒƒãƒ‰ã¯ã€Functionパラメータをå–å¾—ã™ã‚‹ã“ã¨ã§ã€ã‚¹ãƒ¬ãƒƒãƒ‰ã®åˆ¶å¾¡ã‚¹ã‚¿ãƒƒã‚¯ã®å®‰å®šã—ãŸãƒ“ューを介ã—ã¦ã‚¹ã‚¿ãƒƒã‚¯ãƒ»ãƒ•レームã«ã‚¢ã‚¯ã‚»ã‚¹ã§ãã¾ã™ã€‚

      パラレル実行ã¯äº‹å®Ÿä¸Šç„¡åйã«ãªã‚Šã€ã‚¹ãƒˆãƒªãƒ¼ãƒ ãƒ»ãƒ‘イプラインã®å®Ÿè¡Œã¯ç¾åœ¨ã®ã‚¹ãƒ¬ãƒƒãƒ‰ã§ã®ã¿è¡Œã‚れã¾ã™ã€‚

      実装上ã®ãƒŽãƒ¼ãƒˆ:
      実装ã§ã¯ã€ã‚¹ã‚¿ãƒƒã‚¯ãƒ»ã‚¦ã‚©ãƒ¼ã‚­ãƒ³ã‚°ã«å›ºæœ‰ã®ãƒ•レームを固定ã—ã¦ã‚¹ã‚¿ãƒƒã‚¯ã‚’安定ã•ã›ã€ã‚¹ã‚¿ãƒƒã‚¯ãƒ»ã‚¦ã‚©ãƒ¼ã‚­ãƒ³ã‚°ãŒã‚¢ãƒ³ã‚«ãƒ¼ã•れãŸãƒ•レームã®ä¸Šã§å®Ÿè¡Œã•れるよã†ã«ã—ã¾ã™ã€‚ ストリーム・オブジェクトãŒã‚¯ãƒ­ãƒ¼ã‚ºã•れるã‹ã€å†åˆ©ç”¨ã•れるã¨ã€IllegalStateExceptionãŒã‚¹ãƒ­ãƒ¼ã•れã¾ã™ã€‚
      型パラメータ:
      T - スタック・フレームã®ã‚¹ãƒˆãƒªãƒ¼ãƒ ã«é–¢æ•°ã‚’é©ç”¨ã—ãŸçµæžœã®åž‹ã€‚
      パラメータ:
      function - 「スタック・フレームã€ã®ã‚¹ãƒˆãƒªãƒ¼ãƒ ã‚’å–å¾—ã—ã€çµæžœã‚’è¿”ã™ãƒ•ァンクション。
      戻り値:
      「スタック・フレームã€ã®ã‚¹ãƒˆãƒªãƒ¼ãƒ ã«é–¢æ•°ã‚’é©ç”¨ã—ãŸçµæžœã€‚
    • forEach

      public void forEach(Consumer<? super StackWalker.StackFrame> action)
      ç¾åœ¨ã®ã‚¹ãƒ¬ãƒƒãƒ‰ã®StackFrameストリームã®å„è¦ç´ ã«å¯¾ã—ã¦ã€ã“ã®forEachメソッドをコールã™ã‚‹ãƒ¡ã‚½ãƒƒãƒ‰ã§ã‚るスタックã®ãƒˆãƒƒãƒ—・フレームã‹ã‚‰ç§»å‹•ã—ã¦ã€æŒ‡å®šã•れãŸã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã‚’実行ã—ã¾ã™ã€‚

      ã“ã®ãƒ¡ã‚½ãƒƒãƒ‰ã¯ã€

      walk(s -> { s.forEach(action); return null; });

      パラメータ:
      action - ç¾åœ¨ã®ã‚¹ãƒ¬ãƒƒãƒ‰ã®ã‚¹ã‚¿ãƒƒã‚¯ã®å„StackFrameã«å¯¾ã—ã¦å®Ÿè¡Œã•れるアクション
    • getCallerClass

      public Class<?> getCallerClass()
      getCallerClassを呼ã³å‡ºã—ãŸãƒ¡ã‚½ãƒƒãƒ‰ã‚’呼ã³å‡ºã—ãŸå‘¼ã³å‡ºã—å…ƒã®Classオブジェクトをå–å¾—ã—ã¾ã™ã€‚

      ã“ã®ãƒ¡ã‚½ãƒƒãƒ‰ã¯ã€ã“ã®StackWalkerãŒæ§‹æˆã•れã¦ã„ã‚‹SHOW_REFLECT_FRAMESãŠã‚ˆã³SHOW_HIDDEN_FRAMESオプションã«é–¢ä¿‚ãªãã€ã€Œåå°„æž ã€ã€MethodHandleãŠã‚ˆã³ã€Œéš ã—フレームã€ã‚’フィルタ処ç†ã—ã¾ã™ã€‚

      ã“ã®ãƒ¡ã‚½ãƒƒãƒ‰ã¯ã€å‘¼å‡ºã—å´ãƒ•レームãŒå­˜åœ¨ã™ã‚‹å ´åˆã«ã‚³ãƒ¼ãƒ«ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ ã‚¹ã‚¿ãƒƒã‚¯ã®æœ€ä¸‹ä½ãƒ•レームã‹ã‚‰ã‚³ãƒ¼ãƒ«ã•れるã¨ã€IllegalCallerExceptionãŒã‚¹ãƒ­ãƒ¼ã•れã¾ã™ã€‚

      ã“ã®StackWalkerãŒRETAIN_CLASS_REFERENCEã‚ªãƒ—ã‚·ãƒ§ãƒ³ã§æ§‹æˆã•れã¦ã„ãªã„å ´åˆã€ã“ã®ãƒ¡ã‚½ãƒƒãƒ‰ã¯UnsupportedOperationExceptionをスローã—ã¾ã™ã€‚

      APIã®ãƒŽãƒ¼ãƒˆ:
      ãŸã¨ãˆã°ã€Util::getResourceBundleã¯ã€ã‚³ãƒ¼ãƒ«å…ƒã®ã‹ã‚りã«ãƒªã‚½ãƒ¼ã‚¹ãƒ»ãƒãƒ³ãƒ‰ãƒ«ã‚’ロードã—ã¾ã™ã€‚ getCallerClassを呼ã³å‡ºã—ã¦ã€Util::getResourceBundleã¨ã„ã†ãƒ¡ã‚½ãƒƒãƒ‰ã‚’æŒã¤ã‚¯ãƒ©ã‚¹ã‚’識別ã—ã¾ã™ã€‚ 次ã«ã€ãã®ã‚¯ãƒ©ã‚¹ã®ã‚¯ãƒ©ã‚¹ãƒ»ãƒ­ãƒ¼ãƒ€ãƒ¼ã‚’å–å¾—ã—ã€ã‚¯ãƒ©ã‚¹ãƒ»ãƒ­ãƒ¼ãƒ€ãƒ¼ã‚’使用ã—ã¦ãƒªã‚½ãƒ¼ã‚¹ãƒ»ãƒãƒ³ãƒ‰ãƒ«ã‚’ロードã—ã¾ã™ã€‚ ã“ã®ä¾‹ã®å‘¼ã³å‡ºã—元クラスã¯MyToolã§ã™ã€‚
      class Util {
          private final StackWalker walker =
              StackWalker.getInstance(Set.of(Option.DROP_METHOD_INFO, Option.RETAIN_CLASS_REFERENCE));
          public ResourceBundle getResourceBundle(String bundleName) {
              Class<?> caller = walker.getCallerClass();
              return ResourceBundle.getBundle(bundleName, Locale.getDefault(), caller.getClassLoader());
          }
      }
      
      class MyTool {
          private final Util util = new Util();
          private void init() {
              ResourceBundle rb = util.getResourceBundle("mybundle");
          }
      }
      
      walkメソッドを使用ã—ã¦å‘¼ã³å‡ºã—元クラスを検索ã™ã‚‹åŒç­‰ã®æ–¹æ³•ã¯ã€æ¬¡ã®ã¨ãŠã‚Šã§ã™ã€‚(リフレクション・フレームã€MethodHandleãŠã‚ˆã³éžè¡¨ç¤ºãƒ•レームã®ãƒ•ィルタリング):
          Optional<Class<?>> caller = walker.walk(s ->
              s.map(StackFrame::getDeclaringClass)
               .skip(2)
               .findFirst());
      
      javaランãƒãƒ£ã«ã‚ˆã£ã¦èµ·å‹•ã•れãŸstatic public void mainメソッドやã€JNIアタッãƒã•れãŸã‚¹ãƒ¬ãƒƒãƒ‰ã‹ã‚‰èµ·å‹•ã•れãŸãƒ¡ã‚½ãƒƒãƒ‰ãªã©ã€ã‚¹ã‚¿ãƒƒã‚¯ã®æœ€ä¸‹ä½ãƒ•レームã§ã‚るメソッドã‹ã‚‰getCallerClassメソッドãŒã‚³ãƒ¼ãƒ«ã•れるã¨ã€IllegalCallerExceptionãŒã‚¹ãƒ­ãƒ¼ã•れã¾ã™ã€‚
      戻り値:
      ã“ã®ãƒ¡ã‚½ãƒƒãƒ‰ã‚’呼ã³å‡ºã™å‘¼å‡ºã—å´ã®ã‚³ãƒ¼ãƒ«å…ƒã®Classオブジェクト。
      スロー:
      UnsupportedOperationException - ã“ã®StackWalkerãŒOption.RETAIN_CLASS_REFERENCEã§æ§‹æˆã•れã¦ã„ãªã„å ´åˆã€‚
      IllegalCallerException - 呼出ã—å´ãƒ•レームãŒãªã„å ´åˆã€ã¤ã¾ã‚Šã€ã‚¹ã‚¿ãƒƒã‚¯ã®æœ€å¾Œã®ãƒ•レームã§ã‚るメソッドã‹ã‚‰ã“ã®getCallerClassメソッドãŒå‘¼ã³å‡ºã•れãŸå ´åˆã€‚