例外をスローしない基本クラスの呼び出し方法を通じてJava例外をスローすることは可能ですか?
質問
これは例外処理に関するばかげたJavaの質問かもしれませんが、ContentSproviderのサブクラスからサービスを要求しているUIアクター(Androidアクティビティ)があります。サブクラスは、SDカードがいっぱいになった場合、SDカードが欠落している場合、ネットワークI/O ERROROSなどの例外をスローしたいと考えています。ただし、CP-Subclassをコーディングして例外をスローすると、コンパイラは例外を追加するように申し出ます。 CPクラス。明らかに、私は基本クラスを変更したくありませんが、UIにサブクラスの例外をキャッチすることを望んでいます。
わかる?これは可能ですか?そうでない場合、私のサービスサブクラスがスロー可能なオブジェクトをUIに戻すためのより良いパターンがありますか?
解決
「チェックされた例外」を宣言してキャッチする必要があります。 runtimeexceptionsを宣言したり、明示的にキャッチする必要はありません。したがって、runtimeexceptionを投げて、階層の好きな場所でそれをキャッチできます。
他のヒント
あなたは投げることができます Unchecked exceptions
メソッドのプロトタイプにそれらを追加する必要はありません。
未確認の例外は、継承する例外です RuntimeException
. 。それはあなたがやりたかったことですか?
コンパイラによってチェックされていないRuntimeExceptionのサブクラスのインスタンスを投げることができます。
ただし、そうは言っても、空の例外仕様は基本クラスのメソッドの契約の一部です。サブクラスが契約を満たすことが望ましいため、サブクラスインスタンスはスーパークラスタイプを使用する任意のコードで使用できます。 (これは次のように知られています リスコフ代替原則.)