【问题标题】:Check if an exception is a checked exception at runtime在运行时检查异常是否为已检查异常
【发布时间】:2023-04-08 15:20:01
【问题描述】:

这是在运行时检查异常是否为已检查异常的正确方法吗?

public boolean isChecked(final Throwable e) {
    return !(RuntimeException.class.isAssignableFrom(e.getClass()) 
             || Error.class.isAssignableFrom(e.getClass()));
}

【问题讨论】:

  • e instanceof RuntimeException?
  • 您可以为您的问题添加一些上下文吗?也许更大的问题是您是否应该检查异常,无论它是检查还是未检查。
  • 你需要这个做什么?
  • 我有一个非常奇怪的编译时错误,它迫使我处理抛出的Exception,而不是抛出的SomeSubClassOfException,它不是运行时异常。它是我正在编写的一个小型个人教程代码的一部分,用于重新访问 java 中的异常处理
  • 听起来像XY problem。如果您有使用throws Exceptionthrows Throwable 声明的方法,请将其更改为仅抛出它需要抛出的异常。请注意,throws 子句中允许有多个特定例外。

标签: java exception runtime unchecked-exception


【解决方案1】:

我想像下面这样的条件就足够了

return !(e instanceof RuntimeException || e instanceof Error);

【讨论】:

  • 无需猜测:根据 Java 语言规范,您的条件是正确的。 “已检查的异常类是除未检查的异常类之外的所有异常类。即已检查的异常类是Throwable及其除RuntimeException及其子类和Error及其子类之外的所有子类。” @ 987654321@
  • @kaya3 感谢您的澄清。我对层次结构和Error有一点怀疑,但现在清楚了
  • 哦,我忘了 'instanceof' 关键字。
  • @Sero 好吧,如果我的回答对您有所帮助,您可以接受,所以问题将被关闭:)
猜你喜欢
  • 1970-01-01
  • 2012-07-17
  • 1970-01-01
  • 1970-01-01
  • 2011-03-10
  • 1970-01-01
  • 2019-06-24
  • 1970-01-01
相关资源
最近更新 更多