OperationWrapper という名前のログ操作を担当するラッパーがあります。その構造は単純で、次のとおりです。
public void runOperation(Operation o) throws Exception{
logOperationStarted();
o.execute();
logOperationFinished();
}
「o」操作は例外をスローする可能性があるため、logOperationFinished()
メソッドが常に呼び出されるとは限らず、ロギングが正しく動作しません。
また、runOperation()
メソッドを呼び出すさまざまなコンポーネントがこれらの例外を処理します。
常に実行されるようにしたかったのでlogOperationFinished()
、次の構造を実装しました。
public void runOperation(Operation o) throws Exception{
logOperationStarted();
try{
o.execute();
}
catch(Exception e){
throw e;
}
finally{
logOperationFinished();
}
}
logOperationFinished()
常に実行されるようになりましたが、IntelliJ から警告が表示されます。
キャッチされた例外はすぐに再スローされます キャッチされた例外がアクションを実行せずにすぐに再スローされるすべてのcatch
ブロックを 報告します。このような catchブロックは不要であるか、エラー処理が不足しています。
私には、この警告を発行するときに、IntelliJ が finally ブロックを考慮していないようです。
私は何か間違ったことをしていますか、それともこれを達成するためのより良い方法はありますか?
ありがとう。