2016-09-28 22 views
0

我想創建一個類,它可以加載並保存到XML文件中。我想使用一個正在執行加載任務的類,並且我想將它與要保存和加載的實際類整合,一切似乎都可行,直到JAVA不允許類實例成爲從內部變化,即沒有:如何實現一個xml可保存/可加載的類?

this = JAXBLoader.load(); 

所以目前這就是我面臨的問題。

我希望能夠通過類本身的公共方法控制加載並保存它,這樣從外部我不需要任何工廠或管理器來加載它。目前我看到的唯一解決方案是,如果我將我想要保存爲xml的類擴展,然後將所有方法委託給實際類的實例,然後在從文件加載新實例時,實例會被取代。但是如果你需要向班級添加新的方法並且有多種實施方式,那麼必須委託所有的方法,特別是在屁股上的一些開銷......

所以有沒有什麼好的做法或模式在實現類似的東西或解決我上面演示的問題?其實我是開放的,如果有人能夠全面分享什麼是最好的方式來做課堂保存和加載我真的很高興的最簡單的方法。

+0

爲什麼你想避免「工廠或經理」? – lexicore

+0

@lexicore嗯,在某些情況下,我想我想要避免對工廠或其他經理等其他類的額外依賴,並允許經常在類上完成保存,就像在每次操作或類似案例之後一樣。如果你有意見,我會很感激。雖然我知道有時候設計可以有不同的做法,但我想在某些情況下最好這樣做。 –

+0

如果您使用某些編組/解組框架,則隱藏對您的類的訪問權限,您不會避免依賴關係。你仍然有依賴關係,它們只是隱含的,甚至更糟。將解組/編組代碼放入類本身是可能的,然後將其自包含。但這將是一團糟。 JAXB 1做到了這一點,並且*是一團糟。即使你做了XML,那麼你也許需要JSON,PBF等。 – lexicore

回答

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); 

您可以通過代碼注入或通過繼承這個方法添加到您的模式派生代碼。

+0

這個答案看起來非常好!它的內容非常豐富,可以說明整體情況(外部工廠可以完成加載),併爲我的問題提供解決方案!非常感謝你。我會在接下來的幾天嘗試一下,並會接受這個答案! :) –

相關問題