假设我们有 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,我也想给他 onlyFoo。如果他再次反序列化更改后的 onlyFoo,theBaz和theBar 将具有相同的修改后的 onlyFoo,因此如果有人请求一个对象(例如 theBar),他将获得具有所有引用对象(onlyFoo)的完整序列化对象,就像正常的序列化过程将返回.
我知道我必须手动单独存储对象并保留引用,因为默认序列化无法处理此问题。我不知道如何部分序列化/反序列化 Java 对象?我需要将原语及其包装器与“更高”对象分开并单独存储这些对象。
更新
- 我无法修改课程。
- 我不知道所有的课程。它应该适用于我可能从未听说过的所有可序列化对象(它们可能是也可能不是最终的)