2つのアプローチがあります:
To generate a separate exception for each event.
To create a generic exception and describe what caused it
最初のアプローチでは、さまざまなイベントを処理するためのさまざまなコードを記述できますが、多くのExceptionクラスを記述する必要があり、場合によっては多すぎる可能性があります。
2番目のアプローチはより簡潔ですが、さまざまな状況に対処するのが困難になります。
プログラミングでは非常に頻繁に発生するため、最適なソリューションは途中で、個別の例外を生成することと、他の場合に1つの例外を使用することのバランスを取ります。
この場合の経験則は、個別のコードで具体的に処理する例外に対して個別のExceptionクラスを生成することです。
何を投げるかと同様に、何を捕まえるかを制御する必要があります。キャッチブロックには2つのアプローチを使用できます。
すべてのための単一のキャッチブロック。例えば:
catch (Throwable e) {
throw new CommandExecutorException(e);
}
多くのcatchブロックは、例外ごとに1つです。例えば:
} catch (ClassCastException e1) {
...
} catch (FileNotFoundException e) {
...
} catch (IOException e) {
...
}
最初のアプローチは非常にコンパクトですが、基本的にすべての例外を同じケースでグループ化します。これは、すべての例外が等しく管理され、同じことを行う状況でのみ役立ちます。このアプローチは、キャッチされる例外を制御できないため、一般的には推奨されません。これにより、困難なバグが発生することもありますが、これも見つけるのが困難です。
2番目のアプローチでは、より多くのコード行が必要ですが、発生した例外に応じてさまざまな操作を実行できます。このアプローチはより柔軟ですが、場合によっては、例外処理のためにメソッドが非常に長くなることがあります。