在Java中,已经观察到在处理RuntimeException
之后有重新抛出Checked Exception
的约定。
这种方式有好有坏。当编译器强制通过Checked Exception
处理某些内容时,开发人员可以通过捕获它并将其重新抛出为RuntimeException
来摆脱它。
有人可以解释这种情况是否可以视为一种好的做法吗?如果是这样,这种方法会减少出错的可能性,还是会使代码库变得不稳定?
实际上是对handling检查的异常的不适当尝试,导致代码库不稳定。通常,您将拥有:
try {
//stuff
} catch (IOException e) {
log.error("Failed to do stuff", e);
throw e;
}
然后进行下一个升级,您将不得不再次处理它,通常将其全部记录下来并弄乱日志文件。如果您不重新投掷,将是[[甚至更糟:
try {
// do stuff
} catch (IOException e) {
return null;
}
现在调用代码不知道出了什么问题,更不用说什么了。与这些尝试相比,这实际上可以完全满足应用程序逻辑的需求:
try { // do stuff } catch (IOException e) { throw new RuntimeException(e); }
现在,异常可以自由地在调用堆栈中传播,直到到达定义明确的,在这里:exception barrier
此异常的发生是否必须中止当前的工作单位?
关于检查异常的语言功能的争论
由API创建者决定客户端代码中其异常的语义。
Java的推理是可以将异常分为必须在什么时候处理异常
[无论何时遇到throws Exception
的方法,您都找到了另一个鲜活的证据证明受检查的异常的不足。
受检查的异常
可以摆脱它