2011-12-27 21 views
1

私はclass Xを持っていて、その中にdoStuff()というstaticというメソッドがあり、なんらかの理由でdoStuff()を呼び出すメソッドを持ついくつかのクラスがあります。たとえば、doStuff()に印刷メソッドを持たせて、それが呼び出されたメソッドやクラスを出力する方法はありますか?静的メソッドを呼び出すクラスとメソッドを取得するにはどうすればよいですか?

+0

「をドンください。これをやってください! (可能であれば、デバッグを除いてもテストはおそらくもっと良いでしょう) –

答えて

4

はい:new Throwable().getStackTrace()StackTraceElementの配列を返します。インデックス番号1があなたの発信者です。

+1

+1または 'Thread.currentThread()。getStackTrace()' –

+0

ありがとうございましたが、私が使ったインデックスは3でした。インデックス1は私に名前クラスAとdoStuff()のクラス – nyxz

0

Exceptionを行う必要はありません。この類似した質問をチェック:

package test; 

class TestCaller { 
    public static void meth() { 
     System.out.println("Called by class: " + sun.reflect.Reflection.getCallerClass(2)); 
    } 
} 

public class Main { 
    public static void main(String[] args) { 
     TestCaller.meth(); 
    } 
} 

出力: "クラスによって呼び出されます:クラスtest.Main"

Is there a way to dump a stack trace without throwing an exception in java?

2
/** 
* <li> 0 dumpThreads 
* <li> 1 getStackTrace 
* <li> 2 getCallingMethodName 
* <li> 3 [calling method] 
* 
* @return 
*/ 
private String getCallingMethodName() { 
    return Thread.currentThread().getStackTrace()[3].getMethodName(); 
} 
1

を使用して、発信者のクラスを取得することができます

関連する問題