2

serialVersionUID を持たない非常に古いクラスがあります。

4 年前、誰かがこのクラスにランダムな値で serialVersionUID を追加しました。彼は、serialver ツールを使用して値を見つけ、serialVersionUID を追加するときにそれを使用する必要がありましたが、そうではありませんでした。

このクラスの両方のバージョンを使用している顧客がいます。

古い顧客のオブジェクトをデシリアライズしたい場合は、方法があります。新しい顧客が影響を受けるため、現在の serialVersionUID を変更することはできません。

4

1 に答える 1

3

readObject()さまざまなUIDを処理できる独自のメソッドを作成する必要があります。

「シリアル化可能なオブジェクトのバージョン管理」では、UIDの意味とルールについて説明しています。

この答えはより詳細になります。

いくつかのUIDを持つオブジェクトを作成する方法の良い例を見つけようとしましたが、readObject()何も見つかりませんでした。JoshuaBlochによる「EffectiveJava」には例さえありません。「UIDを変更するとエラーが発生します」とだけ表示されますが、このエラーを適切に処理する方法は示されていません。

この質問は少なくとも近づいています:オブジェクトが異なるserialVersionUIDを持っているときに、データベースに永続化されたオブジェクトを逆シリアル化する方法

于 2013-02-06T13:16:46.013 に答える