ホームページ >Java >&#&チュートリアル >スタック トレースまたはリフレクションを使用して Java メソッドの呼び出し元を回復するにはどうすればよいですか?

スタック トレースまたはリフレクションを使用して Java メソッドの呼び出し元を回復するにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-12-31 11:50:15464ブラウズ

How Can I Recover the Caller of a Java Method Using Stack Trace or Reflection?

スタック トレースまたはリフレクションによるメソッドの呼び出し元の回復

メソッドの呼び出し元を識別する機能は、さまざまなデバッグにおいて重要な場合があります。またはシナリオをトレースします。幸いなことに、Java は、この課題に取り組むための 2 つの主なアプローチ、スタックトレースとリフレクションを提供しています。

スタック トレース

Thread.currentThread().getStackTrace() メソッドは配列を返します。 StackTraceElement オブジェクトの数。 Java ドキュメントによると、この配列の最後の要素はスタックの一番下、つまり最も最近のメソッド呼び出しを表します。

例:

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

各 StackTraceElement は、スタックに関する情報を取得するためのいくつかのヘルパー メソッドを提供します。フレーム:

  • getClassName()
  • getFileName()
  • getLineNumber()
  • getMethodName()

特定のユースケースに応じて、stackTraceElements 内のどの要素を決定するかを実験する必要がある場合があります。配列は目的の呼び出し元に対応します。通常、インデックス [1] または [2] にあります。

リフレクション

あるいは、リフレクションを使用して発信者情報にアクセスすることもできます。目的のクラスで getDeclaredMethod メソッドを呼び出すと、目的のメソッドを表す Method オブジェクトを取得できます。次に、Method オブジェクトの getClass メソッドを使用して、宣言したクラスの Class オブジェクトを取得できます。最後に、Class オブジェクトの getName メソッドを使用すると、呼び出し元メソッドのクラスの名前を確認できます。

例:

Class<?> declaringClass = method.getDeclaringClass();
String callerClassName = declaringClass.getName();

スタック トレースの選択そして反射は、望ましい粒度レベルやその他の要因によって異なります。ただし、どちらのアプローチも、Java のメソッドの呼び出し元を追跡するための効果的なメカニズムを提供します。

以上がスタック トレースまたはリフレクションを使用して Java メソッドの呼び出し元を回復するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。