我想创建一个可加载并可保存到XML文件的类。我想使用一个正在执行加载任务的类,我想将它与我想要保存和加载的实际类集成,一切似乎都可行,直到JAVA不允许类实例从课堂内改变,即没有:
this = JAXBLoader.load();
目前这就是我面临的问题。
我希望能够通过类本身的公共方法控制加载并保存它,因此从外部我不需要任何工厂或经理来加载它。目前我唯一能看到的解决方案是,如果我将要保存的类扩展为xml,然后将所有方法委托给实际类的intance,然后从文件中加载新实例时,实例将被取代。但是如果你需要为类添加新方法并且有多个实现,那么必须委托所有方法,尤其是痛苦,这需要一些开销...
那么在实现类似的事情或解决我上面演示的问题方面是否存在任何良好实践或模式?实际上我是开放的,如果有人可以全面分享哪些是最好的方法来节省课程和加载最简单的方法我会很高兴。
答案 0 :(得分:1)
我不太确定你为什么要避开外部工厂和经理。对我来说,提取序列化并不在模型类本身中处理它似乎很自然。但没关系。
我的理解是您的核心问题是将数据加载到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);
您可以通过代码注入或子类化将此方法添加到模式派生代码中。