复制不同类型的HashMap

时间:2014-02-10 12:11:05

标签: java generics hashmap

如何将一个HashMap<String,AddressDTO>的内容复制到另一个HashMap<String,AddressBO>的其他类型。没有 AdressDTOAddressBO之间的继承,都是具有相同属性集的POJO:

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

3 个答案:

答案 0 :(得分:1)

您可以遍历条目集的结果,该结果将为您提供键值对并允许您复制。

此外,HashMap采用地图。可能其他地图也一样。

答案 1 :(得分:0)

您不能仅根据字段相似性将一个对象强制转换为另一个对象。您应该使用继承,或使用某种变换器从AddressBO

创建AddressDTO

如果两个Object包含完全相同的字段,则不需要两个类。

答案 2 :(得分:0)

有多种工具可以使用反射来复制值。

或者,您可以将新地图中的引用设置为与旧地图相同(然后它们将共享相同的HashMap)。

但听起来你的真正问题是从DTO映射到BO。

例如,如果为BO创建一个接受DTO并从中创建新BO的构造函数,那么您可以这样做:

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