0

Javaには、同じカスタム例外をスローするいくつかのメソッドを持つクラスがあります(カスタム例外は「Exception」クラスを拡張します)。

private void setAColor(float r, float g, float b, float a) throws AnException {}
private void setBColor(float r, float g, float b, float a) throws AnException {}
private void setCColor(float r, float g, float b, float a) throws AnException {}

ユーザーにこれらの例外を処理させる代わりに、それらをキャッチしてクラス内で処理できるようにしたいと思います。各メソッドの例外は、まったく同じ方法でキャッチされます。すべてのメソッドにまったく同じtry/catchメソッドブロックを配置する必要はありません。メソッドの本体の外で、クラスの内部でこれらの例外をキャッチする方法はありますか?

お手数をおかけしますが、よろしくお願いいたします。

詳細情報の追加:
これらのメソッドは、特定の時点まで呼び出される場合があります。変数「isImmutable」をtrueに設定するメソッドが呼び出された後、これらのメソッドはオブジェクトに関する情報を変更できなくなります。したがって、「isImmutable」がtrueに設定された後にこれらのメソッドのいずれかが呼び出された場合、「ImmutableException」と呼ばれる例外をスローする必要があります。/この特定の実装/では、これらのメソッドが呼び出されるコード内のすべてのポイントに移動して、まったく同じ方法で処理するのではなく、自分でこれらを処理できるようにしたいと思います。

4

3 に答える 3

1

すべてのメソッドにまったく同じtry/catchメソッドブロックを配置する必要はありません。

次に、例外をスローしないでください。

メソッドの本体の外で、クラスの内部でこれらの例外をキャッチする方法はありますか?

いいえ。

/この特定の実装/では、これらのメソッドが呼び出されるコード内のすべてのポイントに移動して、まったく同じ方法で処理するのではなく、自分でこれらを処理できるようにしたいと思います。

それは意味がありません。エラーが検出された場合、どのように報告しますか?

変数「isImmutable」をtrueに設定するメソッドが呼び出されると、これらのメソッドはオブジェクトに関する情報を変更できなくなります。したがって、「isImmutable」がtrueに設定された後にこれらのメソッドのいずれかが呼び出された場合、「ImmutableException」と呼ばれる例外をスローする必要があります。

例外をRuntimeExceptionのサブクラスにすることを検討しましたか?その場合、呼び出し元は例外ハンドラーを宣言する必要はありません。ハンドラーがない場合、「未処理の例外」が原因でプログラムが終了します。

于 2011-10-09T03:25:50.360 に答える
1

上記のメソッドを、呼び出すスタブメソッドに変えることができます

setColorDelagator(char abc, ...)

に委任する

setColorAWithErrorHandling
setColorBWithErrorHandling
setColorCWithErrorHandling 

try/catch内。

これが最適ではないことに同意しますが、より良い方法がわかりません。

于 2011-10-09T03:42:08.277 に答える
0

別の角度からアプローチするために、ファクトリパターンに切り替えることを検討しましたか?isImmutableをtrueに設定するための呼び出しを行うのではなく、isImmutableがtrueであるインスタンスを取得するために呼び出すようにします...問題のメソッドは、セッターが使用できない別のバージョンのクラスを返します。

于 2011-10-09T04:41:38.533 に答える