zoukankan      html  css  js  c++  java
  • JavaBean对象与Map对象互相转化

    package testExcelFile;
    
    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;
    
    public class BeanToMapUtil {
    
    	/**
    	 * 将一个 Map 对象转化为一个 JavaBean
    	 * 
    	 * @param type
    	 *            要转化的类型
    	 * @param map
    	 *            包含属性值的 map
    	 * @return 转化出来的 JavaBean 对象
    	 * @throws IntrospectionException
    	 *             如果分析类属性失败
    	 * @throws IllegalAccessException
    	 *             如果实例化 JavaBean 失败
    	 * @throws InstantiationException
    	 *             如果实例化 JavaBean 失败
    	 * @throws InvocationTargetException
    	 *             如果调用属性的 setter 方法失败
    	 */
    	public static Object convertMap(Class type, Map map)
    			throws IntrospectionException, IllegalAccessException,
    			InstantiationException, InvocationTargetException {
    		BeanInfo beanInfo = Introspector.getBeanInfo(type); // 获取类属性
    		Object obj = type.newInstance(); // 创建 JavaBean 对象
    
    		// 给 JavaBean 对象的属性赋值
    		PropertyDescriptor[] propertyDescriptors = beanInfo
    				.getPropertyDescriptors();
    		for (int i = 0; i < propertyDescriptors.length; i++) {
    			PropertyDescriptor descriptor = propertyDescriptors[i];
    			String propertyName = descriptor.getName();
    
    			if (map.containsKey(propertyName)) {
    				// 下面一句可以 try 起来,这样当一个属性赋值失败的时候就不会影响其他属性赋值。
    				Object value = map.get(propertyName);
    
    				Object[] args = new Object[1];
    				args[0] = value;
    
    				descriptor.getWriteMethod().invoke(obj, args);
    			}
    		}
    		return obj;
    	}
    
    	/**
    	 * 将一个 JavaBean 对象转化为一个 Map
    	 * 
    	 * @param bean
    	 *            要转化的JavaBean 对象
    	 * @return 转化出来的 Map 对象
    	 * @throws IntrospectionException
    	 *             如果分析类属性失败
    	 * @throws IllegalAccessException
    	 *             如果实例化 JavaBean 失败
    	 * @throws InvocationTargetException
    	 *             如果调用属性的 setter 方法失败
    	 */
    	public static Map convertBean(Object bean) throws IntrospectionException,
    			IllegalAccessException, InvocationTargetException {
    		Class type = bean.getClass();
    		Map returnMap = new HashMap();
    		BeanInfo beanInfo = Introspector.getBeanInfo(type);
    
    		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;
    	}
    	
    	
    }
    

      

  • 相关阅读:
    javaIO流之 字节与字符流认识
    Servlet容器理解(生命周期、servletContext作用域、servlet装载方式)
    是否改变原数组的常用方法
    时间空间复杂度的初步理解---后续补充
    java集合框架之 Set
    【原】SQLPLUS支持上下翻页
    【转】shell脚本写的俄罗斯方块游戏
    【原】Oracle 11.2.0.1 64bit for RHEL6.0 Server x86_64 静默安装
    【原】RHEL6.0企业版安装
    【原】记录一句话
  • 原文地址:https://www.cnblogs.com/cxxjohnson/p/5327022.html
Copyright © 2011-2022 走看看