如何实现一个xmlsaveable/loadableclass?

How to implement an xml saveable/loadable class?

我想创建一个 class,它可以加载并保存到 XML 文件中。我想使用一个正在执行加载任务的 class,我想将它与我想要保存和加载的实际 class 集成,一切似乎都是可行的,直到 JAVA 不允许从 class 中更改 class 实例,即没有:

this = JAXBLoader.load();

这就是我目前面临的问题。

而且我希望能够通过 class 本身的 public 方法控制加载和保存,这样从外部我就不需要任何工厂或管理人员来加载它。目前我看到的唯一解决方案是如果我扩展我想保存为 xml 的 class 然后将所有方法委托给实际 class 的实例和然后从文件加载新实例时,该实例将被替换。但是必须委托所有方法会带来一些开销,尤其是如果您需要向 class 添加新方法并具有多个实现...

那么,在实现类似的目标或解决我上面演示的问题方面,是否有任何好的做法或模式?其实我是开放的,如果有人可以整体分享什么是最好的方法 class 保存和加载最简单的方法我会很高兴。

我不太清楚你为什么要避免外部工厂和管理人员。对我来说,提取序列化而不是在模型 类 本身中处理它似乎很自然。不过还好。

据我了解,您的核心问题是将数据加载到 this 实例中。这是使用 JAXB 实现此目的的简单方法。

我是 JAXB2 Basics 的作者,JAXB/XJC 的插件包。它包含 copyable 插件,它在模式派生的 类.

中生成一些 copyTo 方法

这将为您提供类似 copyTo(Object target) 的方法。有了这个,您可以首先将数据从 XML 解组到某个临时实例,然后再 copyTo(this)。类似于:

MyType temporaryInstance = unmarshaller.unmarshal(source, MyType.class).getValue();
temporaryInstance.copyTo(this);

您可以通过代码注入或子类化将此方法添加到您的模式派生代码中。