可能性のある複製:
serialVersionUIDを気にする必要があるのはなぜですか?
いくつかの例外処理コードを実行しているときに、serialVersionUIDという名前のものが表示されました。このuidは何のためのものですか?例外に限定されているのですか、それともすべてのクラスで使用できますか?このIDの利点は何ですか?
serialVersionUID
は特定のクラスのバージョンを定義するためのフィールドですが、seriializing
&deseriializing
..は、3つのクラスEmployee
があるシナリオを考えます。しばらく生産されているフィールド(つまり、従業員オブジェクトのシリアル化されたバージョンが多数存在する可能性があります)。クラスを更新して(たとえば、4番目のフィールド)、以前のすべてのクラス(シリアル化されたもの)をキャストまたは削除できません。 -新しいものにシリアル化され、例外が発生します。
この問題を回避するには、serialVersionUID
フィールドを使用して、JVM
に新しいクラスが実際に異なるバージョンであることを通知します(serialVersionUID
を変更することにより)。
@Farmor
&@Tom Jefferys
はほとんど同じことを言いましたが、例を使用すると、はるかに単純に見えます。
シリアライゼーションに使用されます。Serializable
を実装するすべてのクラスで宣言する必要があります。
これは、シリアル化されたクラスが、逆シリアル化しようとしているクラス定義と一致するかどうかを確認するためにJVMが使用できるバージョン番号です。
詳細はこちら: http://download.Oracle.com/javase/1,5.0/docs/api/Java/io/Serializable.html
それらが同じserialVersionUID
を持ち、両方がSerializable
を実装している場合、互換性があるかどうかを判断するために、シリアライズ可能およびデシリアライズ可能です。
そして、EclipseがserialVersionUID
を実装する場合、通常のJavaクラスの初期にSerializable
を配置する傾向があることに気づくので、それは例外に限定されません。
編集:Serializable
インターフェースに関する@Spychosの正しいコメントを含むように更新されました。