2011-10-18 44 views
4

JAXB不允許您將已存在的xml結構解組爲HashMap,如果它們不是JAXB期望的方式。在Java中使用HashMap作爲集合

JAXB可以很好地處理LinkedList s並填充它們。

我正在考慮創建一個getKey()方法的接口和一個圍繞HashMap的包裝,它包含所有實現該接口的對象。包裝器然後可以使用getKey()方法來處理地圖的所有關鍵特徵。包裝可以很容易地實現接口CollectionList

因爲這個想法對我來說似乎並不新鮮,我認爲它已經存在於某些軟件包中,但我沒有正確地使用它...有人可以指定一個好的lib可以做到這一點,或者我必須自己編碼嗎?

+0

可能的重複http://stackoverflow.com/questions/7793283/problems-marshalling-a-map-in-jaxb。無論如何,答案可能是相關的。 –

回答

3

你可能會考慮延伸番石榴的ForwardingList,並在後面使用HashMap。我不知道有什麼實現會讓你只有實際的映射。
另一種替代方法是創建JAXB XmlAdapter以使值適應您的地圖。我認爲這一個更合適。

+2

+1。下面是一個如何實現的例子:http://blog.bdoughan.com/2010/07/xmladapter-jaxbs-secret-weapon.html –

+0

XmlApdater似乎有點太多了。我想我會用我自己的帶有Collection接口的Map實現 –

+0

你也可以考慮'ForwardingCollection'。 – oshai

0

如果您正在嘗試將Map的信息內容作爲Collection傳遞,請使用Map.entrySet()。這給你一個Set<Map.EntrySet<K,V>>對象;即其元素是Map的鍵/值對的集合。要從集合中重建Map,您需要迭代集合併爲每個元素執行put

+0

謝謝,不,我想添加東西到地圖上。但是,我不想先將列表中的內容保存到列表中,然後將其複製到地圖中,這僅僅是因爲針對XmlAdapter的JAXB –