如果我100%确定永远不会发生异常,是否有办法告诉Java编译器不要抱怨某个异常没有被捕获或抛出?
答案 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级别的日志记录,这样至少你可以在奇怪的情况下知道实际发生时的问题。
希望这有帮助。