2011-11-11 3 views
2

私はSerializableインターフェイスを拡張するより多くのクラスを実装しています。 serialVersionUIDの値に言及することはよいことを理解しました。SerializableのSerialVersionUID

private static final long serialVersionUID = 1024L; 

だから、私はすべてのこれらのクラスを使用することを考えると、私は、各クラスのserialVersionUIDのために同じ値を与える必要があり、あるいは逆に、彼らは異なることがありますか?

ありがとうございます。

答えて

4

これらは異なっている必要はなく、同じである必要もありません。シリアライズされたオブジェクトがそのクラスによって直列化解除されることを保証するためにのみ使用されます。基本的に、シリアライズされたクラスのコードを変更した場合は、この値も変更する必要があります。

3

あるクラスのserialVersionUIDは、異なるクラスのものとは全く関係がありません。 1つのクラスのserialVersionUIDには全く別のクラスのものがの効果であるという結果が返されます。

したがって、必要に応じてすべてのクラスに同じものを使用し、クラスが変更されたときにそれらをすべて一括して更新することができます。あなたはそうしなければならないことを理解しておく必要があります。

2

重要なことは、新しいシリアル化されたフォームincompatibleを元のものに変更する際に、後でクラスを変更する場合は、serialVersionUIDを変更する必要があります。それ以外は、そのフィールドに任意の値を使用できます。

2

プライベートと宣言しているので、この値はこのクラスに固有であり、継承された値ではなく一意です。

http://docs.oracle.com/javase/1.5.0/docs/api/java/io/Serializable.html

古いオブジェクトをデシリアライズしようとすると、このクラスでは、将来的に他の値にこの値を変更すると、あなたによりInvalidClassExceptionを与えるだろう。

乾杯!

+0

ああ、右! – Madrugada

+0

あなたの歓迎:-)ありがとう – r0ast3d

関連する問題