シリアライゼーションがJavaとその最新バージョンでどのように機能するかを学ぼうとしています。私はこのようなラムダをシリアライズしようとしています:
Runnable r = (Runnable & Serializable)() -> {System.out.println("This is a test");};
serialVersionUID
しかし、変数が存在しないという警告がないことに気付きました。正常ですか?
実行時に生成されることはわかっていますが、定義することを強くお勧めします: https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html
シリアライズ可能なクラスが serialVersionUID を明示的に宣言しない場合、シリアライゼーション ランタイムは、Java(TM) オブジェクト シリアライゼーション仕様で説明されているように、クラスのさまざまな側面に基づいて、そのクラスのデフォルトの serialVersionUID 値を計算します。ただし、デフォルトの serialVersionUID 計算は、コンパイラの実装によって異なる可能性があるクラスの詳細に非常に敏感であり、逆シリアル化中に予期しない InvalidClassExceptions が発生する可能性があるため、すべてのシリアル化可能なクラスで serialVersionUID 値を明示的に宣言することを強くお勧めします。したがって、異なる Java コンパイラの実装間で一貫した serialVersionUID 値を保証するには、シリアライズ可能なクラスで明示的な serialVersionUID 値を宣言する必要があります。また、明示的な serialVersionUID 宣言では、可能な場合は private 修飾子を使用することを強くお勧めします。そのような宣言は、直接宣言するクラスにのみ適用されるためです。serialVersionUID フィールドは、継承されたメンバーとしては役に立ちません。配列クラスは明示的な serialVersionUID を宣言できないため、常にデフォルトの計算値を持ちますが、配列クラスでは serialVersionUID 値を一致させる必要はありません。
私は何をすべきか ?Lambda でどのように定義できますか?
ありがとう