簡體   English   中英

如何防止調用者捕獲我的異常

[英]How to prevent caller from catching my exceptions

我寫了一個safeMethod() ,它不應該拋出任何異常,如果拋出異常,我想讓應用程序崩潰(通過崩潰監控系統報告它們)。

問題是,我需要從包裝在try/catch up the call stack 中的庫回調中調用此方法。

我試圖“加注”:

try {
    safeMethod();
} catch (Exception e) {
    throw new Throwable(e);
}

但這不會編譯,因為重寫的方法沒有聲明throws Throwable

我想到的另一件事是使用一些異步,例如:

new Handler().post(() -> safeMethod());  // Handler is Android class to work with thread's message queue

要么

new Thread(() -> safeMethod()).start();

它有效,但似乎有點矯枉過正,使控制流程復雜化並浪費資源。

有沒有更好的方法?

我在這里和 web 上搜索了“防止捕獲異常”、“覆蓋 catch 塊”、“強制拋出異常”等,但沒有找到任何相關內容。 甚至沒有懸而未決的問題。 在這種情況下,許多僅捕獲特定異常的建議不是很有用。 ;)

我可以建議兩個選項:

  1. 拋出Error
  2. System.exit(1);

選擇哪一個取決於你,主要區別在於拋出錯誤會給你一個堆棧跟蹤,然后執行System.exit(1)

使用不同於 0 的值調用System.exit以顯示錯誤情況很重要。

通常不建議拋出錯誤,但您的情況可能是該規則的例外。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM