2017-05-31 32 views
1

有一天,我需要(不可否認,第一次)獲取堆棧跟蹤爲一個字符串。 e.printStackTrace()當然不會返回一個。爲什麼異常沒有一個方便的方法將堆棧跟蹤作爲字符串返回?

我需要使用this答案中的解決方案來獲得我想要的。

是的我意識到你可以得到堆棧跟蹤元素,然後自己遍歷它們,並且有第三方庫可以在一行中完成它,但是爲什麼標準庫中沒有這樣做會爲你做並返回一個字符串?

+0

四行代碼?寫一個輔助方法。 –

+0

這聽起來有些小意,但是當你用一個乾淨的方法調用寫出1行時,爲什麼要寫4行代碼呢?我認爲這是它被包含在許多常用的第三方庫中的原因 – noobcoder

+0

這很煩人,但這是它的方式。如果你想知道_why_,你必須問Oracle的架構師。 –

回答

1

我總是用e.toString()就夠了。 如果你想要更具體的東西,你可以處理棧跟蹤String result = ex.toString() + "\n"; StackTraceElement[] trace = ex.getStackTrace(); for (int i=0;i<trace.length;i++) { result += trace[i].toString() + "\n";} return result;

+0

你真的讀過這個問題嗎? – noobcoder

+0

對不起,我真的不知道爲什麼Java創建者沒有實現一個更簡單的方法將stacktrace元素轉換爲字符串。我可以假設他們認爲對異常處理沒有必要。 –

+0

它們將所有代碼放在同一行上,就像提問一樣。你爲什麼會質疑他們是否讀過這個問題? –

相關問題