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

Cod*_*lue 3 java exception

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

Jon*_*eet 10

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

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

您可能很想为这种情况创建一个特定的例外 - 虽然我不建议WorldHasGoneMadException使用真实姓名,但类似的东西是合适的.这不仅仅是"发生了意想不到的事情",而是"哇,我会赌好钱,这真的,真的不可能发生".

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


emo*_*ory 5

我认为Jon的答案非常好,但我assert认为已经存在这样一个WorldHasGoneMadException类,因此不需要为它创建一个特定的例外.

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

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