私はメッセージライブラリで作業しています。オブジェクトのsendメソッドは、ソケットが閉じられているなど、いくつかの理由で失敗する可能性があります。常に連鎖する例外をスローするのは意味がありますか?
実行時例外を除いてチェック例外が優先されますが、根本的な例外が常により一般化された別の例外に包まれるように、早期に連鎖を優先させる方が適切です。
たとえば、メッセージはSendFailedException
と表示されますが、cause()
はSocketClosedException
のように具体的になります。これは、チェックされた例外をすべて個別にスローするよりも煩雑にならないように感じます。
他のメソッドでも同様にSocketClosedException
がスローされるため、継承はここではうまくいきません。そして、閉じられた例外はすべて、送信失敗の結果ではありません。
さらに詳しい情報をcause()
にラップするのが適切なのでしょうか、それとももっと混乱するでしょうか?私は野生でこのように機能する例外を発見したことを思い出しませんが、これは他の人にとっては慣習的でなく混乱するかもしれません。
これまでJavaや他のライブラリはこれを行っていますか?私のユースケースには適切ですか?
正常にチェック(またはチェックされていない)例外を持つほとんどすべてのライブラリは、継承を介して独自の例外階層を定義します。そして、例外が再起される必要があるときはいつでも、原因として使用する必要があります。それが原因です。 – zapl
'すべての閉じられた例外は送信失敗の結果ではありません.'閉じた例外が送信失敗ではない例を挙げることができますか? –
クローズされたソケットから無効な状態を問い合わせようとしているときに、クローズされた例外がスローされることがあります。 – Zhro