Maison >Java >javaDidacticiel >Comment puis-je trouver l'appelant d'une méthode Java à l'aide de Stack Trace ou de Reflection ?

Comment puis-je trouver l'appelant d'une méthode Java à l'aide de Stack Trace ou de Reflection ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-21 18:33:15672parcourir

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

Trouver l'appelant d'une méthode à l'aide de Stacktrace ou de réflexion

En Java, la détermination de l'appelant d'une méthode peut être réalisée via stacktrace ou réflexion .

Utilisation de Stacktrace

Le La méthode Thread.currentThread().getStackTrace() renvoie un tableau d'objets StackTraceElement, représentant les éléments de trace de pile du thread actuel. Le dernier élément du tableau représente le bas de la pile, ou l'appel de méthode le moins récent.

Chaque objet StackTraceElement donne accès au nom de la classe (getClassName()), au nom du fichier (getFileName()), à la ligne numéro (getLineNumber()) et nom de méthode (getMethodName()) de l’invocation de méthode correspondante. Pour déterminer l'appelant, vous pouvez généralement utiliser l'élément à l'index 1 ou 2 du tableau StackTraceElement.

Utilisation de Reflection

Reflection propose une autre approche pour identifier l'appelant. La méthode Class#getDeclaringClass() renvoie la classe qui a déclaré la méthode spécifiée. Cela peut être utile si vous souhaitez obtenir la classe de la méthode appelante quelle que soit la trace de pile actuelle.

Exemple

Voici un exemple utilisant stacktrace pour trouver l'appelant du courant méthode :

StackTraceElement[] stackTraceElements = Thread.currentThread().getStackTrace();
if (stackTraceElements.length > 1) {
    StackTraceElement caller = stackTraceElements[1];
    System.out.println("Caller: " + caller.getClassName() + "." + caller.getMethodName());
}

Considérations

  • L'index de l'appelant dans la trace de la pile peut varier en fonction du contexte d'appel.
  • Reflection peut ne pas être disponible dans certains environnements, comme Android.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn