Сериализация не устанавливает значения по умолчанию, она относится к схеме инициализации значения по умолчанию Java.
Если я могу подвести итог вашего вопроса.Вы хотите, чтобы сериализация объединяла содержимое сериализованного потока со значениями в памяти.Это невозможно с сериализацией Java, поскольку она контролирует, какие объекты создавать.Вы можете прочитать свой сериализованный объект, а затем вручную написать код, чтобы объединить поля, которые вы хотите объединить.Если вы застряли на сериализации Java (я бы избежал этого на вашем месте), но, скажем, вы хотите продолжать использовать его.
public class MyObject {
public void merge( MyObject that ) {
// given some other instance of an object merge this with that.
// write your code here, and you can figure out the rules for which values win.
}
}
ObjectInputStream stream = new ObjectInputStream( new FileInputStream( file ) );
MyObject that = stream.readObject();
someObject.merge( that );
Viola, вы контролируете, какие поля будут объединены с этим вSomeObject.Если вы хотите, чтобы библиотека выполняла это слияние, проверьте http://flexjson.sourceforge.net. Она использует сериализацию JSON и работает с Beans, а не с POJO.Однако есть способ взять уже заполненный объект и перезаписать значения из потока JSON.Есть ограничения к этому.Другим преимуществом этого является то, что вы можете на самом деле читать поток обратно ПОСЛЕ того, как ваша структура объекта изменила что-то, что технически может сделать Java-сериализация, но это очень и очень сложно.