1

インターフェイスを実装する場合Serializable、JavaではserialVersionUIDlongを設定する必要があります。

デフォルトまたは自動生成のlongを選択する必要があるかどうかに違いはありますか?

ある人が別の人よりも優先されるべきなのはいつですか?

自動生成longを選択した場合、変更された場合はイベントクラスで変更する必要がありますか?言い換えると、serialVersionUIDに割り当てられる値は、クラスの現在の構造と、そこで宣言されているフィールドおよびメソッドに関連していますか?

private static final long   serialVersionUID    = 1L;
private static final long   serialVersionUID    = 6749067740891125834L;
4

2 に答える 2

2

デフォルトと自動生成されたlongの主な違いは、自動生成されたシリアルバージョンのUIDがオブジェクトのフィールドに基づいていることです。バージョンIDを持たないオブジェクトのコピーを永続化した場合は、生成されたバージョンを使用すると、すでに永続化されているオブジェクトとの互換性を確保するのに役立ちます。このため、私は生成されたバージョンを使用する傾向があります。いずれの場合も、互換性のない変更が行われた場合は、バージョンIDを更新する必要があります。

http://docs.oracle.com/javase/1.5.0/docs/guide/serialization/spec/version.htmlセクション5.6.1および5.6.2では、互換性のある変更と、シリアル化が中断される変更について説明しています。

于 2012-07-04T03:37:14.103 に答える
1

シリアルバージョンのUIDは任意の数にすることができ、その値には特定の意味はありません。

それは理にかなっており、1から始めて、フォーマットが変更されるたびにインクリメントすると便利です。

ただし、最初から考えた場合にのみ、それを行うことができます。引き続き読み取る必要のある既存のデータがある場合、このデータには自動生成されたIDが含まれます。この場合、選択の余地はありませんが、その値に一致させる必要があります。

于 2012-07-04T03:36:42.463 に答える