繁体   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