34

重複の可能性:
serialVersionUIDについて気にする必要があるのはなぜですか?

いくつかの例外処理コードを実行していますが、serialVersionUIDという名前のコードが表示されました。このuidは何のためにありますか?例外に限定されているのですか、それともすべてのクラスで使用できますか?このIDの利点は何ですか?

4

3 に答える 3

42

serialVersionUIDは特定のクラスのバージョンを定義するフィールドですが、seriializing& deseriializing.. しばらくの間生産されている 3 つのフィールドを持つクラスがあるシナリオを考えてみましょうEmployee(従業員オブジェクトのシリアル化されたバージョンが多数存在する可能性があることを意味します)。クラスを更新して (4 番目のフィールドなど) を含めると、以前のすべてのクラス (シリアル化されている) を新しいクラスにキャストまたは逆シリアル化することができず、例外が発生します。

この問題を回避するために、フィールドを使用して、新しいクラスが実際には異なるバージョンであることserialVersionUIDを伝えることができます (を変更することにより)。JVMserialVersionUID

@Farmor&@Tom Jefferysはほぼ同じことを言っていますが、例を使用すると、物事はずっと簡単に見えます.

于 2011-08-25T08:45:33.963 に答える
7

シリアライゼーションに使用され、 を実装するすべてのクラスで宣言する必要がありますSerializable

これは事実上、シリアル化されたクラスが、逆シリアル化しようとしているクラス定義と一致するかどうかを確認するために JVM が使用できるバージョン番号です。

詳細については、http: //download.oracle.com/javase/1,5.0/docs/api/java/io/Serializable.htmlを参照してください。

于 2011-08-25T08:37:50.750 に答える
3

シリアライズ可能およびデシリアライズ可能な互換性があるかどうかを判断することです。serialVersionUID両方の実装が同じであり、互換性がある場合Serializable

serialVersionUIDまた、Eclipse がSerializable.

編集: インターフェイスに関する @Spychos の正しいコメントを含めるように更新されましたSerializable

于 2011-08-25T08:38:11.290 に答える