Допустим, у нас есть 3 класса:
class foo { // not a singleton
String s;
}
class bar {
foo f;
int i;
}
class baz {
foo sameF;
}
Теперь мы создаем экземпляры
foo onlyFoo = new foo("the only one");
bar theBar = new bar(onlyFoo, 123);
baz theBaz = new baz(onlyFoo);
После этого мы хотим сохранить их последовательно в файле. Если мы десериализуем theBaz, изменим onlyFoo и снова десериализуем theBaz в файл, то theBar по-прежнему будет содержать исходный onlyFoo, поэтому есть две разные версии onlyFoo.
Вместо этого я хочу, чтобы я хранил theBaz и theBar без onlyFoo, хранил три объекта отдельно, и как только кто-то десериализует theBaz, я также хочу дать ему только Foo. Если он снова десериализует измененный onlyFoo, у Baz и theBar будет то же измененное onlyFoo, поэтому, если кто-то запрашивает объект (например, theBar), он получает полный сериализованный объект со всеми объектами, на которые ссылаются (onlyFoo) как нормальный процесс сериализации вернется.
Я знаю, что мне нужно хранить объекты и сохранять ссылки вручную и отдельно, потому что сериализация по умолчанию не может справиться с этой проблемой. Чего я не знаю, так это того, как частично сериализовать/десериализовать объекты Java? Мне нужно отделить примитивы и их оболочки от «высших» объектов и хранить эти объекты отдельно.
Обновить
- Я не могу изменить классы.
- Я не знаю все классы. Он должен работать со всеми сериализуемыми объектами, о которых я, возможно, никогда не слышал (они могут быть или не быть окончательными)