2014-02-10 31 views
0

如何將一個HashMap<String,AddressDTO>的內容複製到另一個不同類型的另一個HashMap<String,AddressBO>。有AdressDTOAddressBO之間沒有 繼承,無論是POJO具有相同的屬性集:複製不同類型的HashMap

AddressDTO addDTO = new AddressDTO(); 
addDTO.setAdd1("add1"); 
addDTO.setAdd2("add2"); 
addDTO.setAddtype("pri"); 
addDTO.setCity("city"); 


Map<String,Object> map1 = new HashMap<String,Object>(); 
map1.put("primary", addDTO); 

Map<String,Object> map2 = new HashMap<String,Object>(map1); 
AddressBO addnew = (AddressBO) map2.get("primary"); 
//this will give me runtime error AddressDTO cannot be cast to AddressBO  
System.out.println(addnew.getAdd1()); 
System.out.println(addnew.getAdd2()); 
System.out.println(addnew.getAddtype()); 
+0

你有沒有在所有的代碼控制?還是你需要堅持給定的類不變? – Fildor

回答

1

你可以通過條目集的結果,這將給你的鍵值對,並允許您複製循環。

此外,HashMap需要一張地圖。也許其他地圖也可以。

0

僅基於字段相似性,不能將一個對象投射到另一個對象。您應該使用繼承或使用某種變形來創建AddressBOAddressDTO

如果兩個對象都包含完全相同的字段,則不需要兩個類。

0

有各種工具可用,將使用反射來複制值。

或者,您可以將新地圖中的引用設置爲與舊地圖相同(然後它們將共享相同的HashMap)。

但聽起來你真正的問題是從DTO到BO的映射。

例如,如果你創建了一個接受DTO,並從它創建一個新的BO,那麼你可以只是做了BO一個構造函數:

for (Entry<String, DTO> e: map1) { 
    map2.put(e.getKey(), new BO(e.getValue())); 
} 
+0

它工作,如果我在BO類中添加構造函數接受對象,並進一步鑄造到DTO。並修改上面的代碼(Entry e:map1.entrySet())map2.put(e.getKey(),new AddressBO(e.getValue())); } //否則會提示map1無法迭代。謝謝,但可以有其他解決方案... – user3292748

+0

有很多方法可以做到,但沒有一個是特別整潔。 –