java - 递归读取任何 java 对象并将复杂类型提取到 HashMap 中

标签 java parsing reflection object

我需要编写一个实用程序,它将接受一个空白的 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/

相关文章:

解析 Prolog 中的表达式并返回抽象语法

java - 从非结构化文件中解析数据

java - REST API 使用动态 JSON

scala - 是否有可能实现(在 Scala 中)自动实现包装类方法的多态包装类?

c# - Expression.PropertyOrField 中的 AmbiguousMatchException

java - 镜像带有字符串参数的方法

java - 数组作为方法参数

java - IText 将文档与 acrofields 合并

java - Apache Kafka 0.9 Java API 使用主题开头的所有消息

java - 如何在没有任何文本字段的情况下乘以 jtable 中的单元格