クラスException(新しい例外を作成するため)を使用してクラスを拡張すると、serialVersionUID
の警告が表示されます。 serialVersionUID
がシリアライズおよびデシリアライズ中に重要な役割を果たすことを知っていますが、例外をシリアライズする必要がある場合はどうなりますか?カスタム例外クラスにシリアル化と逆シリアル化を持たせたいという実用的なケースを誰かに教えてもらえますか?
これは、すべての例外のルートクラスThrowable
がSerializable
インターフェースを実装するためです。デフォルトではすべての例外はシリアライズ可能であり、作成者は特別な設定なしで例外をネットワーク経由で送信できるようにしたかったため、これは言語設計の決定です。
基本クラスがシリアル化可能でない場合、組み込みの例外タイプを制御できないため、リモートメソッドが失敗した場合に正確に何が問題であったかを伝えるのは困難です。
カスタム例外が(RMI、Spring http-invokerなどを使用して)分散アプリケーションで使用され、リモートクライアントから呼び出されるサーバーメソッドからスローできる場合は、ワイヤーを介して例外をシリアル化する必要があります。クライアントに行きます。
唯一のオプションは、定義するすべてのserialVersionUID
タイプに対してException
を定義する(IDEが生成することができる)か、警告を表示しないことです。
私の以前の質問 有害と見なされる明示的なserialVersionUID? 関連があるかもしれません。