我想创建一个可加载并可保存到 XML 文件的类。我想使用一个正在执行加载任务的类,并且我想将其与我想要保存和加载的实际类集成,一切似乎都是可行的,直到 JAVA 不允许类实例从类内部更改,即没有:
this = JAXBLoader.load();
所以目前这就是我面临的问题。
我希望能够通过类本身的公共(public)方法来控制加载和保存它,这样从外部我不需要任何工厂或管理器来加载它。目前我见过的唯一解决方案是,如果我扩展要保存为 xml 的类,然后将所有方法委托(delegate)给实际类的实例,然后从文件加载新实例时,该实例会被替换。但是,必须委托(delegate)所有方法会带来一些开销,尤其是如果您需要向类添加新方法并具有多个实现,那会很痛苦......
那么,有什么好的实践或模式可以实现类似的目标或解决我上面演示的问题吗?实际上我很开放,如果有人可以总体分享什么是保存类的最佳方法和加载最简单的方法,我会非常高兴。
最佳答案
我不太清楚为什么你要避开外部工厂和经理。对我来说,提取序列化而不是在模型类本身中处理它似乎很自然。不过还好。
我的理解是,您的核心问题是将数据加载到 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);
您可以通过代码注入(inject)或子类化将此方法添加到架构派生代码中。
关于java - 如何实现 xml 可保存/可加载类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39757239/