の代わりに生成されたserialVersionIDの利点シリアライズ可能なクラスのserialVersionUIDについて、同僚と話し合いました。彼は常にserialVersionUID = 1L
で始まり、クラスに大きな変更があったときに1ずつインクリメントします。1L、2L、
JDKクラスは常に、より複雑な使用するように見えるが、java.lang.String
クラスのような serialVersionUIDs生成:
private static final long serialVersionUID = -6849794470754667710L;
を今私の同僚は、1L、2Lのような非常に簡単serialVersionUIDの対serialVersionUIDが、この種の利点について質問します、3L ...?
また、SOFで検索しましたが、回答が非常に満足できません(例:Why generate long serialVersionUID instead of a simple 1L?)。
私の意見では、生成されたIDを使用する利点は、 '古い'クラスのバージョンに関する情報は必要ないということです。しかし、手動でIDをインクリメントするときは、これまでのところ最高の値を知る必要があります。これは(現在のserialVersionUIDを見て、それを1だけ増やすだけで)些細なことかもしれませんが、より大きなソフトウェアプロジェクト、より大きな開発チーム、または分散環境ではもっと複雑になる可能性があります。
クラスに重大な変更が加えられた場合にそれを増やすと、これらの変更によって新しいバージョンのクラスが古いバージョンと互換性がなくなります。その場合、serialVersionUIDをまったく持たないことは、最も冗長で簡単な解決策です。 –
serialVersionUIDは、クラスのバージョンではなく、シリアライズされたフォーム*の互換バージョンを追跡するのに最適です。クラスは、状態がシリアル化された形式から書き込まれ、読み込まれる方法に何ら変更することなく、広範囲に変更することができます。クラスがシリアライズされたフォームと互換性がある限り、serialVersionUIDを変更する理由はありません(シームレスに指定するのがベストプラクティスです)。 – scottb
人は私を間違えないでください、私は直列化の仕組みがどのように動作するのか知っていますし、問題はありません。私は、生成されたserialVersionUIDsと増分されたものの利点または不利な点について疑問に思います。 –