3

如果我 100% 确定该异常永远不会发生,有没有办法告诉 Java 编译器不要抱怨某个异常没有被捕获或抛出?

4

3 回答 3

10

假设你的意思是检查异常,你不能。通常我会捕获异常,但将其传播到 aRuntimeException中,例如

try {
   // Do something which could, but won't, throw SomeCheckedException
} catch (SomeCheckedException e) {
   throw new WorldHasGoneMadException(e);
}

您可能很想为这种场景创建一个特定WorldHasGoneMadException的例外 - 虽然我不建议使用真实姓名,但类似的东西是合适的。这不仅仅是“发生了意想不到的事情”,而是“哇,我敢打赌,这真的,真的不可能发生”。

哦,当然您的单元测试不会涵盖这种情况。忍受它:)

于 2012-05-25T15:18:37.997 回答
5

我认为乔恩的回答非常好,但我希望assert已经有这样的WorldHasGoneMadException课程,因此您无需为它创建特定的例外。

try {
   // Do something which could, but won't, throw SomeCheckedException
} catch (SomeCheckedException e) {
   assert false : e ;
}

在启用断言的情况下运行测试。如果你得到一些 AssertionErrors,你就知道你的假设有问题。在生产过程中,违反您的假设(您确实对其进行了彻底的测试,因此不会有违反,对吧?)将被默默地吞下。

于 2012-05-25T15:30:51.367 回答
2

如果有一个设置,我很确定没有,我不建议使用它。

我通常在调试“发生”的生产错误时遇到那些“永远不会发生”的事件。;-) 至少我会建议尝试/捕获并记录一些错误级别,以便至少在实际发生的奇怪情况下让您意识到问题。

希望这可以帮助。

于 2012-05-25T15:23:35.577 回答