ショートバージョン: 呼び出しスタック内の前のMethod
を見つけるにはJavaの方法を見つける必要があります(メソッドの大文字の 'M'には実際のjava.lang.reflect.Method
オブジェクトが必要です)。Javaでの呼び出し方法の検索
背景: Google GuavaのPreconditions.checkNotNull(...)
コンセプトの拡張に取り組んでいます。このコンセプトにより、プログラマはnullのすべてのパラメータを同時にチェックし、呼び出し元のメソッドのパラメータ名に基づいてNPEを構築できます。例:最初の引数がnullだった場合
public class MyClass
{
public void myMethod(Object arg1, Integer arg2, String arg3)
{
MyPreconditions.checkAllNotNull(arg1, arg2, arg3);
}
}
ので、その後、NPEはarg1 cannot be null (MyClass:myMethod(Object, Integer, String)
を読むかもしれない私はすでにClass
呼び出して取得すると、私は春を経由してパラメータ名を取得することができますどのように出て働いてきましたLocalVariableTableParameterNameDiscoverer
(またはパラナーゼライブラリーを介して)1つはMethod
です。私が把握できない部分は、Method
を取得する方法だけです。
スタックトレースを使用してメソッドを取得することはできますが、メソッドがオーバーライドされてもそれは役に立ちません。実際のスタックを取得する方法はありますか(内部のcom.sunクラスでも)?代わりに、私は呼び出しメソッドの行番号を得ることができるので、オブジェクトから取得したMethod
の行番号を見つける方法はありますか?
重複するhttp://stackoverflow.com/questions/421280/in-java-how-do-i-find-the-caller-of-a-method-using-stacktrace-or-reflection –