Java中的可抛出和异常



假设我有一个名为 BugException 的类,它从 RuntimeException 扩展而来BugException有一个复制构造函数,它接受一个Throwable。

此代码编译和类型检查:

Throwable e = ...;
if (e instanceof BugException) {
   throw new BugException(e);
}

为什么会这样:

Throwable e = ...;
if (e instanceof BugException) {
   throw e;
}

不编译并给出错误消息:unhandle exception.java.lang.Throwable。

为什么这种不必要的包装是必要的,以满足类型检查器的要求?

在编译时,不知道e是什么样的异常。这可能是一个已检查的异常,在这种情况下,编译器将需要您将throw包装在 try/catch 中或让方法抛出它。

但是,如果显式强制转换未选中的异常,则它将编译。

Throwable e = ...;
if (e instanceof BugException) {
   throw (BugException) e;
}

相关内容

最新更新