web-dev-qa-db-ja.com

通常は例外クラスのJavaのserialVersionUIDとは何ですか?

可能性のある複製:
serialVersionUIDを気にする必要があるのはなぜですか?

いくつかの例外処理コードを実行しているときに、serialVersionUIDという名前のものが表示されました。このuidは何のためのものですか?例外に限定されているのですか、それともすべてのクラスで使用できますか?このIDの利点は何ですか?

27
amod

serialVersionUIDは特定のクラスのバージョンを定義するためのフィールドですが、seriializingdeseriializing ..は、3つのクラスEmployeeがあるシナリオを考えます。しばらく生産されているフィールド(つまり、従業員オブジェクトのシリアル化されたバージョンが多数存在する可能性があります)。クラスを更新して(たとえば、4番目のフィールド)、以前のすべてのクラス(シリアル化されたもの)をキャストまたは削除できません。 -新しいものにシリアル化され、例外が発生します。

この問題を回避するには、serialVersionUIDフィールドを使用して、JVMに新しいクラスが実際に異なるバージョンであることを通知します(serialVersionUIDを変更することにより)。

@Farmor@Tom Jefferysはほとんど同じことを言いましたが、例を使用すると、はるかに単純に見えます。

30
Anantha Sharma

シリアライゼーションに使用されます。Serializableを実装するすべてのクラスで宣言する必要があります。

これは、シリアル化されたクラスが、逆シリアル化しようとしているクラス定義と一致するかどうかを確認するためにJVMが使用できるバージョン番号です。

詳細はこちら: http://download.Oracle.com/javase/1,5.0/docs/api/Java/io/Serializable.html

6
Tom Jefferys

それらが同じserialVersionUIDを持ち、両方がSerializableを実装している場合、互換性があるかどうかを判断するために、シリアライズ可能およびデシリアライズ可能です。

そして、EclipseがserialVersionUIDを実装する場合、通常のJavaクラスの初期にSerializableを配置する傾向があることに気づくので、それは例外に限定されません。

編集:Serializableインターフェースに関する@Spychosの正しいコメントを含むように更新されました。

2
Farmor