51

クラス Exception (新しい例外を作成するため) を使用してクラスを拡張すると、serialVersionUID. シリアル化と逆シリアル化の際に重要な役割を果たすことは知っていserialVersionUIDますが、いつ例外をシリアル化する必要がありますか? カスタム例外クラスにシリアライゼーションとデシリアライゼーションを持たせたい実用的なケースを誰か教えてもらえますか?

4

3 に答える 3

64

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

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

于 2011-10-07T06:34:40.587 に答える
14

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

于 2011-10-07T06:40:27.920 に答える
5

唯一のオプションは、定義serialVersionUIDするすべてのException型を定義するか (IDE で生成できます)、警告を抑制することです。

以前の質問の明示的な serialVersionUID が有害と見なされていることに気付くかもしれません。関連する。

于 2011-10-07T06:43:12.060 に答える