2012-05-07 10 views
0
public void writeToParcel(Parcel parcel, int flags) throws IOException { 
    doSomethingThatThrowsIOException(); 
} 

私のParcelable.writeToParcel(Parcel、int)からIOExceptionをスローできないのはなぜですか?コンパイラquothが

例外にIOExceptionがと互換性がありませんが、 Parcelable.writeToParcel(小包、int型)にthrows節

私は、内の任意の場所にthrows節が表示されませんdocsまたは実際のParcelableコードです。これは厄介なスレッドの問題ですか?

+0

私は皆の答えを受け入れることができない、私はnoobのに信用を与えるでしょう... catchブロック。入力いただきありがとうございます! – QED

+0

ありがとうpsoft! :-) –

答えて

2

"writeToParcel"メソッドは親クラスParcelからオーバーライドされます。メソッドをオーバーライドすると、元のメソッドのシグネチャもthrows節も変更できません。

2つのオプションがあります。IOExceptionがスロー ものを外部OR試し内の例外をハンドル -

3

Parcelable.writeToParcel(Parcel, int)ParcelableはIOExceptionをスローしません。したがって、クラスを拡張して独自のwriteToParcel(Parcel, int)を定義すると、親クラスにないチェック例外をスローすることはできません。

1

これはまさに問題です.IOExceptionはチェックされた例外であり、再スローまたはキャッチする必要があります。 superがこの例外をスローしない場合は、同様に例外をスローすることはできません。

§11.2JLSから:throws節で指定された

チェック例外クラス 法や コンストラクタの実装者とユーザとの間の契約の一部です。オーバーライドするメソッドのthrows節では、 が指定されていない場合、このメソッドは、 のオーバーライドされたメソッドがthrows句によって throwに許可されていないチェック例外をスローします。インタフェースが含まれている場合、複数のメソッド宣言 は、1つのオーバーライド宣言によってオーバーライドされる可能性があります。この場合、 オーバーライド宣言には、すべてのオーバーライド宣言(9.4)と互換性のある のthrows節が必要です。

関連する問題