14

Eclipse は正しく serialVersionUID を生成してくれます。しかし、生成を再度行わない限り、ファイルを変更しても ID が自動的に更新されないため、これは受動的なコード生成のようです。

内容を変更するたびに serialVersionUID を生成する方法はありますか? 「保存アクション」にはそのようなオプションが含まれていないようです-誰かがこれを行う方法を見つけましたか?

シリアライゼーションに影響を与えない変更を元に戻すことができるように、IDE の保存アクションなどと組み合わせることができると便利です。

よろしく、トウコ

編集: @gustafc: これには 2 つの主なポイントがあります。

  • 私が正しく理解していれば、異なるコンパイラはserialVersionUIDの異なる値になる可能性があります
    • Serializable APIから:ただし、デフォルトの serialVersionUID の計算は、コンパイラの実装によって異なる可能性があるクラスの詳細に非常に敏感であり、逆シリアル化中に予期しない InvalidClassExceptions が発生する可能性があるため、すべての直列化可能なクラスで serialVersionUID 値を明示的に宣言することを強くお勧めします。
  • サーバーでオブジェクトを実行するようなコマンド パターンを使用しています。そのため、オブジェクトのコンテンツは変更されていませんが、クライアントとサーバーでクラスのコンテンツが異なる場合をキャッチするとよいでしょう。
    • しかし、もう一度考えてみると、コンテンツの変更だけがそれを変更するので、これはおそらく自動生成された値では機能しないでしょうか? だから、実際には自動インクリメントされたserialVersionUIDが欲しい

これは理にかなっていますか?

まとめ、さらに考えた結果、変更のたびに自動インクリメントされた serialVersionUID の方がさらに良いでしょう...

4

3 に答える 3

4

Eclipse には、これを行うための標準機能はありません。

于 2009-09-23T07:53:13.870 に答える
2

Ant SerialVer taskを使用して、ビルド時にシリアル バージョンを更新できます。

于 2009-11-17T07:21:45.023 に答える
0

生成をやり直さない限り、ファイルを変更しても ID は自動的に更新されません。

私の知る限り、デフォルトserialVersionUIDはまさにこれです-クラスの現在の「形状」に基づいて生成されたID。したがって、何かを変更したときに ID を生成したい場合は、省略してください。

serialVersionUIDただし、たまにしか変更したくない場合は、変更してください。IDへのランダムな変更は行います。

乱数は、連続した数よりもわずかに優れているだけです (環境内で同じ修飾名を持つクラスを作成する人が他にいないと仮定できる場合)。そのため、serialVersionUID = 1この数から始めて、自由にインクリメントすることもできます。

于 2013-01-02T23:13:36.420 に答える