web-dev-qa-db-ja.com

例外クラスをシリアル化する必要があるのはなぜですか?

クラスException(新しい例外を作成するため)を使用してクラスを拡張すると、serialVersionUIDの警告が表示されます。 serialVersionUIDがシリアライズおよびデシリアライズ中に重要な役割を果たすことを知っていますが、例外をシリアライズする必要がある場合はどうなりますか?カスタム例外クラスにシリアル化と逆シリアル化を持たせたいという実用的なケースを誰かに教えてもらえますか?

44
amod

これは、すべての例外のルートクラスThrowableSerializableインターフェースを実装するためです。デフォルトではすべての例外はシリアライズ可能であり、作成者は特別な設定なしで例外をネットワーク経由で送信できるようにしたかったため、これは言語設計の決定です。

基本クラスがシリアル化可能でない場合、組み込みの例外タイプを制御できないため、リモートメソッドが失敗した場合に正確に何が問題であったかを伝えるのは困難です。

56

カスタム例外が(RMI、Spring http-invokerなどを使用して)分散アプリケーションで使用され、リモートクライアントから呼び出されるサーバーメソッドからスローできる場合は、ワイヤーを介して例外をシリアル化する必要があります。クライアントに行きます。

12
JB Nizet

唯一のオプションは、定義するすべてのserialVersionUIDタイプに対してExceptionを定義する(IDEが生成することができる)か、警告を表示しないことです。

私の以前の質問 有害と見なされる明示的なserialVersionUID? 関連があるかもしれません。

5