Javaでは、静的フィールドと一時フィールドはシリアル化されません。ただし、静的フィールドを初期化すると、生成されたserialVersionUIDが変更されることがわかりました。たとえばstatic int MYINT = 3;
、serialVersionUIDを変更します。この例では、クラスのバージョンが異なれば初期値も異なるため、これは理にかなっています。初期化によってserialVersionUIDが変更されるのはなぜですか?たとえばstatic String MYSTRING = System.getProperty("foo");
、serialVersionUIDも変更されます。
具体的には、メソッドで初期化するとserialVersionUIDが変更されるのはなぜですか。私が遭遇した問題は、システムプロパティ値(getProperty)で初期化された新しい静的フィールドを追加したことです。この変更により、リモート呼び出しでシリアル化例外が発生しました。