0

クラスの静的メソッドがあり、オブジェクトまたはスレッドの別の非静的メソッドから呼び出されています。
どのスレッドまたはオブジェクトから呼び出されたかを知る方法はありますか?
それは不可能だと思いますし、私はただそれを必要としていますが、それを確認したいだけです.

私はこのようなことを意味します

class CallerID
{
    public static void main(String ...s)
    {
        CallerID ob=new CallerID();
        ob.caller();
    }
    void caller()
    {
        showCaller();
        System.out.println("In this method, ob = "+this);
    }
    static void showCaller()
    {
        //code to get caller object ob like it is printed in method caller()
    }
}
4

5 に答える 5

1

スレッドの最新のスタック トレース (通常は 4 番目のエントリ) を調べるか、繰り返して確認することができます。

 StackTraceElement[] trace = Thread.currentThread().getStackTrace();
 if(trace.length > 3){
   System.out.println("Called from method " + trace[3].getMethodName() + " of class " + trace[3].getClassName());
 }
于 2013-07-14T14:35:12.387 に答える
1

使用できます

StackTraceElement[] el = Thread.currentThread().getStackTrace();

バックトレースを見て、そこから呼び出し元を見つけることができます。

于 2013-07-14T14:24:32.090 に答える
1

スレッドは で見つかりましたThread.currentThread()。呼び出し元のオブジェクトが見つかりません。呼び出し元のメソッドは、スタック トレースを解析することで見つけることができますが、これはかなり遅いかもしれません。

于 2013-07-14T14:25:32.917 に答える
1

オブジェクトの呼び出しを取得できません。呼び出し元のオブジェクト、スレッド、およびメソッドを取得できますが、参照が必要な場合はthisパラメーターとして渡す必要があります。

于 2013-07-14T14:26:41.930 に答える
1

実際には、スタック トレースを出力して、どのスレッドとオブジェクトから呼び出されたかを知ることができます。

于 2013-07-14T14:23:21.493 に答える