1. ホーム

[解決済み】再試行キャッチはどのように実装するのですか?

2022-04-03 08:49:56

質問

トライキャッチは、例外処理を支援するためのものです。つまり、予期せぬ出来事から回復しようとする、より堅牢なシステムを実現するためのものです。

命令実行(メッセージ送信)時に何か起こるかもしれないので、tryで囲む。もし、予想外のことが起きたら、catchを書けばいいのです。例外のログを取るだけではダメだと思うんです。catchブロックは、エラーから回復する機会を与えるためのものだと思う。

さて、何が問題だったのかを修正できたので、エラーから回復できたとしましょう。再挑戦するのはとてもいいことです。

try{ some_instruction(); }
catch (NearlyUnexpectedException e){
   fix_the_problem();
   retry;
}

これではすぐに永遠のループに陥ってしまいますが、仮にfix_the_problemがtrueを返したら、再挑戦します。Javaにそのようなものがないことを考えると、あなたならこの問題をどのように解決しますか?これを解決するためのあなたのベストな設計コードは何でしょうか?

これは哲学的な質問のようですが、私が求めているものがJavaで直接サポートされていないことをすでに知っていることを考えると、このような質問になります。

どのように解決するのですか?

を囲む必要があります。 try-catch の中に while のようなループになります。-

int count = 0;
int maxTries = 3;
while(true) {
    try {
        // Some Code
        // break out of loop, or return, on success
    } catch (SomeException e) {
        // handle exception
        if (++count == maxTries) throw e;
    }
}

を撮影してきました。 countmaxTries で例外が発生し続ける場合は、無限ループに陥らないようにするために try block .