2010-07-28 165 views
12

我想知道是否可以從方法內部訪問調用堆棧,以查看哪個包稱爲我們現在所在的包?訪問Java調用堆棧

或者也許有另一種方式做到這一點?

感謝,

ExtremeCoder

附:這一切都是在Java中

回答

18

有一個辦法:

Thread.currentThread().getStackTrace() 

但不應該有一個原因,而不是用於調試目的這樣做等。

+1

+1:肯定不應該改變基於調用者的行爲,但上面的內容正是如何獲取信息。另外,如果你堅持使用1.4,那麼你必須用例外來獲得信息;值得升級到Java5而不是做那些黑客IMO。 – 2010-07-28 07:49:55

+0

噢,另一個用堆棧讀取的事情是,如果你正在執行安全上下文,但是使用你已經獲得的安全策略工具反而更好。 – 2010-07-28 07:51:58

+0

答案是正確的,但我不同意這只是用於調試。在我的應用程序中,我向Log4j寫了一個包裝器,它根據調用者的名字將日誌消息發送給appender。因此,您可以只添加一行日誌消息,而不必在代碼中顯式調用'Logger.getLogger()'。您可以調用日誌記錄工具進行調試,但無論如何。 – jutky 2010-07-28 07:55:05