如何将一个HashMap<String,AddressDTO>
的内容复制到另一个HashMap<String,AddressBO>
的其他类型。没有
AdressDTO
和AddressBO
之间的继承,都是具有相同属性集的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());
答案 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()));
}