【发布时间】:2014-05-05 19:55:37
【问题描述】:
我有 method1() 在整个代码中从许多其他方法调用。这是方法的签名:
public void method1(final Properties properties) throws IOException {}
所有调用此方法的方法也会抛出 IOException。
method1() 中的实际代码发生了变化,所以现在它不再抛出 IOException 而是抛出一些扩展 Exception 的其他异常,并且 不再 IOException。
我不想更改所有调用 method1() 的方法的签名。
是否可以创建 IOException 并仍然从 method1() 抛出 IOException 并因此调用 method1() 的方法?
如下所示:
Try {
// code
} catch (Exception e) {
throw new IOException(e.getCause());
}
【问题讨论】:
-
这可行,但对我来说它看起来很脏,因为您丢失了实际抛出的异常类型所携带的信息。
-
当我有 e.getCause() 和 e.getMessage() 时,他们不给我实际的异常以及与该异常相关的信息吗?
-
我宁愿直接使用
Throwable构造函数:new IOException(e),所以当你的ioexception被捕获时,可以使用myIOException.getCause()检索根异常。此外,这将在堆栈跟踪中打印一个caused by块,这将有助于调试 -
如果
method1的所有调用者也抛出IOException他们似乎没有处理它,那么声明异常毫无意义。如果不期望调用者处理method1抛出的内容,为什么不抛出RuntimeException的合适子类型? -
调用者自己处理或抛出自己的 IOException。你是对的,我可以更改所有方法的签名 - 包括 method1() 来抛出自定义 exp。相反,但想避免与此相关的实际代码更改。经验。但是,method1() 抛出的问题不会也不应该被处理,它最终会出现在错误日志中。
标签: java exception ioexception