首頁 > Java > java教程 > 如何使用堆疊追蹤或反射找到 Java 方法的呼叫者?

如何使用堆疊追蹤或反射找到 Java 方法的呼叫者?

Mary-Kate Olsen
發布: 2024-12-21 18:33:15
原創
669 人瀏覽過

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

使用 Stacktrace 或 Reflection 尋找方法的呼叫者

在 Java 中,可以透過 Stacktrace或反射來決定方法的呼叫者.

使用Stacktrace

Thread.currentThread().getStackTrace() 方法傳回StackTraceElement 物件的數組,表示當前執行緒的堆疊跟踪元素。數組中的最後一個元素表示堆疊的底部,或最近的方法呼叫。

每個StackTraceElement 物件都提供對類別名稱(getClassName())、檔案名稱(getFileName())、行的存取對應方法呼叫的編號(getLineNumber()) 和方法名稱(getMethodName()) 。若要決定呼叫者,通常可以使用 StackTraceElement 陣列的索引 1 或 2 處的元素。

使用反射

反射提供了另一種辨識呼叫者的方法。 Class#getDeclaringClass() 方法傳回宣告指定方法的類別。如果您想獲取呼叫方法的類別而不考慮當前的堆疊跟踪,這會很有用。

範例

這裡有一個使用 stacktrace尋找呼叫者的範例目前的方法:

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

注意事項

  • 堆疊追蹤中呼叫者的索引可能會因呼叫上下文而不同。
  • 反射在某些環境下可能無法使用,例如 Android。

以上是如何使用堆疊追蹤或反射找到 Java 方法的呼叫者?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板