可能性の重複:
Why should I bother about serialVersionUID?JavaのserialVersionUIDとは何ですか、通常は例外クラスですか?
私はいくつかの例外処理コードを通過すると私はserialVersionUIDのという名前の何かを見ました。このuidは何ですか?それは例外に限定されているのですか、またはすべてのクラスで使用できますか?このidの利点は何ですか?
可能性の重複:
Why should I bother about serialVersionUID?JavaのserialVersionUIDとは何ですか、通常は例外クラスですか?
私はいくつかの例外処理コードを通過すると私はserialVersionUIDのという名前の何かを見ました。このuidは何ですか?それは例外に限定されているのですか、またはすべてのクラスで使用できますか?このidの利点は何ですか?
serialVersionUIDをあなたは多くのシリアル化が存在してもよいという意味いくつかの時間のために生産されている3つのフィールドを持つクラスEmployee
を(持っているシナリオを考え.. & deseriializingをseriializingしながら、特定のクラスのバージョンを定義するためのフィールドであり、バージョンの従業員オブジェクト)を含むクラスを更新すると(たとえば4番目のフィールド)、クラスを更新すると(シリアル化されている)以前のすべてのクラスを新しいクラスにキャストまたはデシリアライズすることはできません。
この問題を回避するには、serialVersionUID
フィールドを使用して、新しいクラスが異なるバージョンのものであることをJVMに通知します(serialVersionUIDを変更します)。
@Fomor & @Tom Jefferysはほとんど同じことを言っていましたが、例を挙げればもっと簡単に見えます。
よく説明されています。この例では+1です。 –
シリアル化に使用されています。Serializable
を実装するすべてのクラスで宣言する必要があります。
これは実質的に、シリアル化されたクラスが逆シリアル化しようとしているクラス定義と一致するかどうかを確認するためにJVMが使用できるバージョン番号です。
それについての詳細はこちらをあります:http://download.oracle.com/javase/1,5.0/docs/api/java/io/Serializable.html
それは、彼らが同じserialVersionUID
を持ち、両方の実装がSerializable
その後、彼らは互換性がある場合、彼らは、シリアライズとdeserializable互換性を持っているかどうかを判断します。
Serializable
を実装すると、日食が通常のJavaクラスの早い段階でserialVersionUID
になる傾向があることに気づくでしょう。
編集:Serializable
インターフェイスに関する@Spychosのコメントが正しくありません。
これは厳密に正しいわけではありません。オブジェクトは、そのスーパークラスの1つがシリアライザブルを実装する場合、シリアライズ可能です。 – Spycho
ここをクリックしてください:http://stackoverflow.com/questions/285793/why-should-i-other-about-serialversionuid –
これは良い、よく公式化された質問IMHOですが、すでに(ほとんど)上記のリンクにあります。それが「例外」に限定されているかどうかについては、答えは「いいえ」です。どのクラスでも使用できます。例外的に –
はシリアライズ可能ではありません...その理由は? – amod