問題タブ [serialversionuid]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - NetBeansはJavaクラスの自動シリアルバージョンIDを生成できますか?
自動シリアルバージョンIDを生成して、一部のクラスの警告を削除したいと思います。Eclipseでは、これを行うのは簡単です。IDEは自動的に生成してクラスに追加できます。ただし、この機能はNetBeansには表示されません。利用できますか?もしそうなら、それはどこにありますか?そうでない場合、それを有効にすることができるプラグインはありますか?
java - Java Exception クラスが拡張する基本クラスを変更した場合、serialVersionUID 値を更新する必要がありますか?
次の Java 例外クラスを検討してください。
から直接派生するBarException
ように、継承階層を削除して更新したい場合、値を変更する必要がありますか?FooException
RuntimeException
serialVersionUID
java - 変更ごとの serialVersionUID の Eclipse 自動生成
Eclipse は正しく serialVersionUID を生成してくれます。しかし、生成を再度行わない限り、ファイルを変更しても ID が自動的に更新されないため、これは受動的なコード生成のようです。
内容を変更するたびに serialVersionUID を生成する方法はありますか? 「保存アクション」にはそのようなオプションが含まれていないようです-誰かがこれを行う方法を見つけましたか?
シリアライゼーションに影響を与えない変更を元に戻すことができるように、IDE の保存アクションなどと組み合わせることができると便利です。
よろしく、トウコ
編集: @gustafc: これには 2 つの主なポイントがあります。
- 私が正しく理解していれば、異なるコンパイラはserialVersionUIDの異なる値になる可能性があります
- Serializable APIから:ただし、デフォルトの serialVersionUID の計算は、コンパイラの実装によって異なる可能性があるクラスの詳細に非常に敏感であり、逆シリアル化中に予期しない InvalidClassExceptions が発生する可能性があるため、すべての直列化可能なクラスで serialVersionUID 値を明示的に宣言することを強くお勧めします。
- サーバーでオブジェクトを実行するようなコマンド パターンを使用しています。そのため、オブジェクトのコンテンツは変更されていませんが、クライアントとサーバーでクラスのコンテンツが異なる場合をキャッチするとよいでしょう。
- しかし、もう一度考えてみると、コンテンツの変更だけがそれを変更するので、これはおそらく自動生成された値では機能しないでしょうか? だから、実際には自動インクリメントされたserialVersionUIDが欲しい
これは理にかなっていますか?
まとめ、さらに考えた結果、変更のたびに自動インクリメントされた serialVersionUID の方がさらに良いでしょう...
java - maven2プラグインを使用したシリアルバージョンuidの自動生成
Serializable インターフェイスを実装するすべての Java クラス ファイルのシリアル バージョンの uid を自動的に計算および更新する Maven プラグインはありますか?
java - JavaランタイムにserialVersionUIDを無視させますか?
serialVersionUIDを明示的に指定しなかった多数のコンパイル済みJavaクラスを操作する必要があります。それらのUIDはコンパイラによって任意に生成されたため、実際のクラス定義が一致していても、シリアル化および逆シリアル化する必要のあるクラスの多くは例外を引き起こします。(もちろん、これはすべて予想される動作です。)
戻ってこのサードパーティのコードをすべて修正するのは現実的ではありません。
したがって、私の質問は次のとおりです。JavaランタイムにserialVersionUIDの違いを無視させ、構造に実際の違いがある場合にのみ逆シリアル化に失敗する方法はありますか?
java - リフレクション シリアライズ可能なオブジェクトのリスト
で質問しました:リスト オブジェクトを反映する
私は実際に私の答えを得ました。これを行うと、なぜこれを行うと illegalArgumentException にヒットするのかを理解したいだけです: Can not set static final ArrayList SerialVersionUID to java.lang.long. しかし、あるオブジェクトを別のオブジェクトに反映すると、エラーは発生しません。
java - どういう意味ですか: シリアル化可能なクラスは、静的な final serialVersionUID フィールドを宣言していませんか?
タイトルにある警告メッセージがあります。理解して削除したいと思います。この質問についてはすでにいくつかの回答を見つけましたが、技術用語が多すぎるため、これらの回答を理解できません。この問題を簡単な言葉で説明できますか?
PS私はOOPが何であるかを知っています。オブジェクト、クラス、メソッド、フィールド、およびインスタンス化とは何かを知っています。
PPS誰かが私のコードを必要とするなら、それはここにあります:
python - 漬物のバージョン管理
pickle
/を使用してシリアル化され、ディスクに格納されている多数のオブジェクトがあるプロジェクトに取り組んでいますcPickle
。
プロジェクトの存続期間が進むにつれて(現場の顧客にリリースされた後)、将来の機能/修正により、永続化されたオブジェクトの一部の署名を変更する必要が生じる可能性があります。これは、フィールドの追加、フィールドの削除、またはデータの不変条件の変更でさえあり得ます。
serialVersionUID
( Javaのように)特定のバージョンを持つものとしてピクルスにされるオブジェクトをマークする標準的な方法はありますか?基本的に、Fooバージョン234のインスタンスを復元しているが、現在のコードが236である場合、unpickleに関する通知を受け取りたいと思います。先に進んで、独自のソリューションを展開する必要があります(PITAの可能性があります)。
ありがとう
java - serialVersioUID はインターフェイスで必要ですか (そうでないことを望みます)?
serialVersionUID
クラスに対してのみオブジェクトを作成でき、serialVersionUID の概念はオブジェクトのシリアライゼーションとデシリアライゼーションのためのものであるため、私の理解はクラスにのみ適用されます。
java - serialVersionUID が自動的に生成されないのはなぜですか?
serialVersionUID
が自動生成されないのはなぜですか? どうやら古いクラスがキャッシュされているアプリケーション サーバーで問題が発生していました。