我有一个POJO和一个(当前尚未构建)的类,它将返回它的列表。我想自动生成将POJO作为地图进行访问所需的代码。这是一个好主意吗,是否可以自动执行,并且我需要为要处理的每个POJO手动执行此操作吗?
谢谢,安迪
您可以为此使用Commons BeanUtils BeanMap。
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,则可以执行以下操作:
java.beans
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; }