透過堆疊追蹤或反射復原方法的呼叫者
辨識方法呼叫者的能力在各種除錯中至關重要或追蹤場景。幸運的是,Java 提供了兩種主要方法來應對這項挑戰:堆疊追蹤和反射。
堆疊追蹤
Thread.currentThread().getStackTrace() 方法傳回一個陣列StackTraceElement 物件。根據 Java 文檔,該數組的最後一個元素代表堆疊的底部,這是最近的方法呼叫。
範例:
StackTraceElement[] stackTraceElements = Thread.currentThread().getStackTrace();
每個 StackTraceElement都提供了幾種輔助方法來取得有關堆疊的資訊框架:
根據特定的用例,您可能需要進行試驗來確定stackTraceElements 中的哪個元素數組對應到所需的呼叫者。通常,它將位於索引 [1] 或 [2] 處。
反射
或者,可以使用反射來存取呼叫者資訊。透過呼叫所需類別的 getDeclaredMethod 方法,您可以擷取表示感興趣方法的 Method 物件。然後,使用 Method 物件上的 getClass 方法,可以獲得宣告類別的 Class 物件。最後,使用 Class 物件上的 getName 方法,可以確定呼叫方法的類別的名稱。
範例:
Class<?> declaringClass = method.getDeclaringClass(); String callerClassName = declaringClass.getName();
堆疊追蹤之間的選擇反射取決於所需的粒度等級和其他因素。然而,這兩種方法都提供了有效的機制來追蹤 Java 中方法的呼叫者。
以上是如何使用堆疊追蹤或反射恢復 Java 方法的呼叫者?的詳細內容。更多資訊請關注PHP中文網其他相關文章!