3

例外が発生しないと100%確信している場合に、特定の例外がキャッチまたはスローされないことについて文句を言わないようにJavaコンパイラーに指示する方法はありますか?

4

3 に答える 3

10

チェックされた例外を意味すると仮定すると、できません。通常、私は例外をキャッチしますが、それをに伝播しますRuntimeException

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

確かにない設定がある場合は、使用しないことをお勧めします。

私は通常、「発生した」本番エラーをデバッグしているときに、これらの「発生しない」イベントに遭遇します。;-)少なくとも、実際に発生した奇妙なケースの問題に気付くことができるように、エラーレベルのログインを使用してtry/catchを実行することをお勧めします。

お役に立てれば。

于 2012-05-25T15:23:35.577 に答える