我需要编写一个实用程序,它将接受一个空白的 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 映射并将其返回。 这就像 map 中的 parent 一样。但是个别 child 也将作为 map 中的后续条目存在。
我是 java 反射的新手,我浏览了网上的一些教程和示例。对如何进行不太有信心。我相信这是这里的专家和专业人士可能遇到的常见需求之一。
请帮我解决这个问题。是否有任何开源的 bean 实用程序可用于执行此操作?如果是这样,请告诉我。
最佳答案
应该这样做:
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();
}
}
这当然会将所有对象的所有字段放入一张 map 中。如果您想要子图,您可能必须为每个递归步骤创建一个图。如果您需要,我也可以给您该代码。
没有返回 map ,因为传递给方法的 map 已填充。
关于java - 递归读取任何 java 对象并将复杂类型提取到 HashMap 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4441632/