一尘不染

产生地图 来自POJO

java

我有一个POJO和一个(当前尚未构建)的类,它将返回它的列表。我想自动生成将POJO作为地图进行访问所需的代码。这是一个好主意吗,是否可以自动执行,并且我需要为要处理的每个POJO手动执行此操作吗?

谢谢,安迪


阅读 260

收藏
2020-12-03

共1个答案

一尘不染

您可以为此使用Commons BeanUtils
BeanMap

Map map = new BeanMap(someBean);

更新
:由于由于Android中某些明显的库依赖问题而导致该选项不可行,因此这是一个基本的启动示例,您几乎不需要反射API就能做到这一点:

public static Map<String, Object> mapProperties(Object bean) throws Exception {
    Map<String, Object> properties = new HashMap<>();
    for (Method method : bean.getClass().getDeclaredMethods()) {
        if (Modifier.isPublic(method.getModifiers())
            && method.getParameterTypes().length == 0
            && method.getReturnType() != void.class
            && method.getName().matches("^(get|is).+")
        ) {
            String name = method.getName().replaceAll("^(get|is)", "");
            name = Character.toLowerCase(name.charAt(0)) + (name.length() > 1 ? name.substring(1) : "");
            Object value = method.invoke(bean);
            properties.put(name, value);
        }
    }
    return properties;
}

如果可以使用java.beansAPI,则可以执行以下操作:

public static Map<String, Object> mapProperties(Object bean) throws Exception {
    Map<String, Object> properties = new HashMap<>();
    for (PropertyDescriptor property : Introspector.getBeanInfo(bean.getClass()).getPropertyDescriptors()) {
        String name = property.getName();
        Object value = property.getReadMethod().invoke(bean);
        properties.put(name, value);
    }
    return properties;
}
2020-12-03