java - 如何防止调用者捕获我的异常

标签 java

我编写了一个 safeMethod() ,它不应该抛出任何异常,如果抛出异常,我想使应用程序崩溃(通过崩溃监控系统报告它们)。

问题是,我需要从 library callback 调用这个方法这是 wrapped in try/catch up the call stack .

我尝试“提高赌注”:

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

但这不会编译,因为重写的方法没有声明抛出Throwable

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

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

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

它确实有效,但似乎有点矫枉过正,使控制流程复杂化并浪费资源。

还有更好的方法吗?

我在这里和网上搜索了“防止捕获异常”、“覆盖 catch block ”、“强制抛出异常”等,但没有找到任何相关内容。甚至没有未回答的问题。在这种情况下,仅捕获特定异常的许多建议并不是很有用。 ;)

最佳答案

我可以建议两个选择:

  1. 抛出错误
  2. System.exit(1);

由您决定选择哪一个,主要区别在于抛出错误将为您提供堆栈跟踪,然后执行 System.exit(1)

使用不同于 0 的值调用 System.exit 来显示错误情况非常重要。

通常不建议抛出错误,但您的情况可能是该规则的异常(exception)。

关于java - 如何防止调用者捕获我的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65439310/

相关文章:

java - LinkedHashSet 去除重复对象

java - OS X Catalina 以管理员权限破坏了 osascript 启动

java - 保存到内部存储文件-Android

java - 编译器检查类的注释

java - 一个线程如何告诉另一个线程停止?

java - 我无法解决这个问题 "NullPointerException"

java - 使用 ByteBuddy 的没有空构造函数的类的代理

java - Native Query 在 JPA 应用程序中返回带有 java.lang.Object 而不是自定义对象类型的列表

java - Java AES 实现中字节和整数位移的奇怪结果

Java FileOutputStream,将 double 据写入文件