您可以嘗試catch
異常,然後通過
public static Throwable getRootCause(Throwable throwable) {
Throwable cause;
while ((cause = throwable.getCause()) != null) {
throwable = cause;
}
return throwable;
}
運行一下,看看是否有一個底部。 getRootCause(evilNPE).printStackTrace()
。
(從Guava Throwables#getRootCause()
竊取代碼)
異常應該始終有一個根本原因,應該是技術上可以創建一個無限循環,但我想你會需要的反射或其他極不規範使用異常來實現那。如果真的如此,你會永遠循環上面的方法。
你可能使用遞歸處理的方式一樣
void recursion(int steps) {
try {
if (steps > 0)
recursion(steps - 1);
else
throw new Exception("Hidden root");
} catch (Exception e) {
throw new Exception("Wrap Exception because we can", e);
}
}
其中每個異常被捕獲,包裝並傳播到下面的外臺階。
另一方面,您可能會誤解某些內容,例如您遵循this
的參考,其中再次參考this
。
我願意打賭它不是無底的。 – christopher
很難告訴你沒有看到任何代碼。 – csmckelvey
...或堆棧跟蹤。 – Pedantic