zoukankan      html  css  js  c++  java
  • JavaBean 和 Map 之间互相转换

    JavaBean 和 Map 之间互相转换

    import java.beans.BeanInfo;
    import java.beans.IntrospectionException;
    import java.beans.Introspector;
    import java.beans.PropertyDescriptor;
    import java.lang.reflect.InvocationTargetException;
    import java.lang.reflect.Method;
    import java.util.HashMap;
    import java.util.Map;
    
    /**
     * JavaBean and map converter.
     * 
     * 
     */
    public final class BeanMapUtils {
        
        /**
         * Converts a map to a JavaBean.
         * 
         * @param type type to convert
         * @param map map to convert
         * @return JavaBean converted
         * @throws IntrospectionException failed to get class fields
         * @throws IllegalAccessException failed to instant JavaBean
         * @throws InstantiationException failed to instant JavaBean
         * @throws InvocationTargetException failed to call setters
         */
        public static final Object toBean(Class<?> type, Map<String, ? extends Object> map) 
                throws IntrospectionException, IllegalAccessException,    InstantiationException, InvocationTargetException {
            BeanInfo beanInfo = Introspector.getBeanInfo(type);
            Object obj = type.newInstance();
            PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();
            for (int i = 0; i< propertyDescriptors.length; i++) {
                PropertyDescriptor descriptor = propertyDescriptors[i];
                String propertyName = descriptor.getName();
                if (map.containsKey(propertyName)) {
                    Object value = map.get(propertyName);
                    Object[] args = new Object[1];
                    args[0] = value;
                    descriptor.getWriteMethod().invoke(obj, args);
                }
            }
            return obj;
        }
        
        /**
         * Converts a JavaBean to a map.
         * 
         * @param bean JavaBean to convert
         * @return map converted
         * @throws IntrospectionException failed to get class fields
         * @throws IllegalAccessException failed to instant JavaBean
         * @throws InvocationTargetException failed to call setters
         */
        public static final Map<String, Object> toMap(Object bean)
                throws IntrospectionException, IllegalAccessException, InvocationTargetException {
            Map<String, Object> returnMap = new HashMap<String, Object>();
            BeanInfo beanInfo = Introspector.getBeanInfo(bean.getClass());
            PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();
            for (int i = 0; i< propertyDescriptors.length; i++) {
                PropertyDescriptor descriptor = propertyDescriptors[i];
                String propertyName = descriptor.getName();
                if (!propertyName.equals("class")) {
                    Method readMethod = descriptor.getReadMethod();
                    Object result = readMethod.invoke(bean, new Object[0]);
                    if (result != null) {
                        returnMap.put(propertyName, result);
                    } else {
                        returnMap.put(propertyName, "");
                    }
                }
            }
            return returnMap;
        }
    }
  • 相关阅读:
    ArcGIS SilverLight/WPF API 2.0版本已正式发布,新特性
    ArcGIS Server Flex API 自定义缩放控件的级数[代码]
    First
    HTML和JavaScript代码分离、平稳退化(1)
    cocos2dx 仿射变换
    java数组创建
    第一次看CCControl
    从零开始のcocos2dx生活(四)ActionManager
    从零开始のcocos2dx生活(二)Node
    从零开始のcocos2dx生活(三)Scheduler
  • 原文地址:https://www.cnblogs.com/mjorcen/p/3754557.html
Copyright © 2011-2022 走看看