11

EclipseでserialVersionUIDをシリアルに生成する方法はありますか?シリアルとは、1つのシリアル化可能なクラスのserialVersionUID = 1Lの場合、別のクラスのserialVersionUIDを生成すると、serialVersionUID=2Lになることを意味します。

1L、2L、3Lなどを手動で指定した場合、問題が発生する可能性がありますか?

Eclipseは「生成されたシリアルバージョンIDを追加する」を選択するオプションを提供しましたが、このオプションは安全に選択できますか?

4

4 に答える 4

17

いいえ、次の2つの状況のいずれでも問題は発生しません。

  • 手動で段階的に指定できます
  • Eclipseにランダムに生成された値を割り当てさせることができます
  • あなたはそれらすべて1Lを異なるクラスのために保つことができます

シリアルUIDの目的は、特に上位互換性がない場合(たとえば、クラスの新しいバージョンを以前の定義でシリアル化/非シリアル化できない場合)、異なるバージョンでの同じクラスのシリアル化と逆シリアル化を禁止することです。

これは、特にシリアル化に依存する大きなフレームワークの一部ではない独自のプロジェクトで作業する場合に、非常にまれにしか発生しない状況です。だからあなたはあなたがやりたいことを安全に行うことができます。

同じクラスに異なるシリアルを設定したい場合は、クラスを更新していて、同じクラスの以前の宣言でクラスのシリアル化を禁止したい場合です。

于 2012-04-30T19:13:18.697 に答える
2

あなたの質問に逆に答えさせてください:

生成されたシリアルバージョンIDを追加します...安全ですか?回答:はい

1L、2L、3Lを手動で指定する場合、問題は次のとおりです。すべて1またはその他の数値にする以外に問題はありません。

シリアルIDをシリアルに生成する:答えは、これを行うための組み込みのメカニズムがないということです。あなたがこの質問をしているという事実は、あなたがserialVersionUIDが何のためにあるのかわからないと私に信じさせます。これが何をするかをすでに読んだとしても、もう一度読む必要があります。

于 2012-04-30T19:13:34.190 に答える
2

これを行うべきではありません。serialVersionUIDオブジェクトシリアル化仕様のオブジェクトバージョン管理セクションのルールを遵守することにより、クラスの進化中に可能な限り一定に保つという考え方です。

あなたの「プログラミングスタイル」はそれとは何の関係もありません。それはそれが設計された目的のために物を使うことの問題です。それはあなたがそれを使用している目的のために設計されていません。ソースコード管理システムはあなたのためにそれを行うことができます。

于 2012-05-01T01:05:13.677 に答える
1

Javaシリアル化は、すべてのクラスが同じserialVersionUIDを持つことをサポートします

これはバージョン管理に使用されるため、古い定義のシリアル化されたオブジェクトは新しいバージョンと互換性がありません

詳細については、 http://java.sun.com/developer/technicalArticles/Programming/serialization/を確認してください(「バージョン管理」までスクロールダウンしてください)

于 2012-04-30T19:12:55.767 に答える