1. ホーム
  2. java

[解決済み] serialVersionUIDとは何ですか、またなぜそれを使用する必要がありますか?

2022-03-18 22:33:18

質問

を指定した場合、Eclipseは警告を発します。 serialVersionUID が欠落している。

シリアライズ可能なクラス Foo は、静的な final serialVersionUID フィールドの型は long

とは何ですか? serialVersionUID また、なぜそれが重要なのですか? 例えば serialVersionUID が問題になります。

解決方法は?

のドキュメントは java.io.Serializable は、おそらくあなたが得ることができるのと同じくらい良い説明です。

<ブロッククオート

シリアライゼーションランタイムは、各シリアライゼーション可能なクラスに対して serialVersionUID これは、デシリアライズの際に、シリアライズされたオブジェクトの送信者と受信者が、シリアライズに関して互換性のあるそのオブジェクトのクラスをロードしたことを確認するために使用されます。もし、受信者がオブジェクトのクラスをロードした場合、そのクラスは異なる serialVersionUID 対応する送信者クラスのものと異なる場合、デシリアライゼーションでは InvalidClassException . シリアライズ可能なクラスは、独自の serialVersionUID というフィールドを宣言することで、明示的に serialVersionUID で、static、final、type は long :

ANY-ACCESS-MODIFIER static final long serialVersionUID = 42L;

<ブロッククオート

シリアライザブルクラスが明示的に serialVersionUID の場合、シリアライゼーションランタイムはデフォルトの serialVersionUID の値は、Java(TM) Object Serialization Specification に記述されているように、クラスのさまざまな側面に基づいて決定されます。しかし、それは 強く推奨 すべてのシリアライズ可能なクラスは、明示的に serialVersionUID の値は、デフォルトの serialVersionUID の計算は、コンパイラの実装によって異なるクラスの詳細に非常に敏感であり、その結果、予期しない InvalidClassExceptions は、デシリアライゼーション時に そのため、一貫した serialVersionUID の値は、異なるJavaコンパイラの実装にまたがって、シリアライザブルクラスは、明示的な serialVersionUID の値を指定します。また serialVersionUID なぜなら、そのような宣言はその場で宣言したクラスにしか適用されないからです。 serialVersionUID フィールドは、継承されたメンバとして有用ではありません。