如何告诉Java编译器不要抱怨某些异常没有被捕获或抛出?

时间:2012-05-25 15:16:29

标签: java exception

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

3 个答案:

答案 0 :(得分:10)

假设您的意思是检查异常,则不能。通常情况下,我会捕获异常,但会将其传播到RuntimeException,例如

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

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

哦,当然你的单元测试不会涵盖这种情况。和它一起生活:)

答案 1 :(得分:5)

我认为Jon's answer非常好,但我会assert已经存在这样的WorldHasGoneMadException类,因此无需为此创建特定的例外。

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

启用断言运行测试。如果你得到一些AssertionErrors,你知道你的假设存在一些问题。在制作期间,违反你的假设(你做了彻底的测试,所以没有违规,对吗?)将被默默地吞下。

答案 2 :(得分:2)

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

我经常遇到那些“永远不会发生”的事件,同时调试“发生”的生产错误。 ;-)至少我会建议尝试/捕获一些ERROR级别的日志记录,这样至少你可以在奇怪的情况下知道实际发生时的问题。

希望这有帮助。