我需要编写一个实用程序,它接受一个空白的HashMap和任何对象作为参数并返回HashMap
public HashMap returnMap(HashMap map,Object parseThisObject){
//logic to strip all children, children of children...... and place it in HashMap
//return map
}
此对象包含很多对象,其中的对象包含很多子对象,并且继承了这些对象。
我的实用程序必须足够通用,以递归方式读取所有子项,直到它到达每个对象中的基元,将每个对象放在hasp映射中并将其返回。 这就像父母会在地图中出现的那样。但是个别孩子也会在地图中作为后续条目出现。
我是java反射的新手,我在网上浏览了一些教程和示例。对如何进行不太自信。我相信这是专家和专业人士可能面临的经常要求之一。
请帮助我解决这个问题。如果有任何bean实用程序开源可用吗?如果是的话请告诉我。
答案 0 :(得分:5)
这样的事情应该这样做:
public void fillMap(HashMap<String, Object> map, Object bean) {
try {
BeanInfo info = Introspector.getBeanInfo(bean.getClass());
PropertyDescriptor[] props = info.getPropertyDescriptors();
for (int i = 0; i < props.length; i++) {
Method reader = props[i].getReadMethod();
if (reader != null && !props[i].getName().equals("class")) {
Object invoke = reader.invoke(bean, new Object[] {});
if (invoke != null) {
if (!reader.getReturnType().isPrimitive()) {
fillMap(map, invoke);
} else {
map.put(props[i].getName(), invoke);
}
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
当然,这会将所有对象的所有字段放入一个地图中。如果您想要子项的子图,则可能必须为每个递归步骤创建一个映射。如果你需要,我也可以给你这些代码。
没有返回地图,因为传递给该方法的地图已被填充。
答案 1 :(得分:4)
看看Apache Commons BeanUtils。它已经完成了你需要的很大一部分,甚至可以一次性完成所有工作。