• JavaBean和Map之间的转化


    * 实现Javabean和Map之间的转化
    * 1)Javabean拥有多组属性名和属性值
    *,每一个属性名对应一个属性值
    * 2)Map有多组key-value,
    每一个key对应一个value,可以是不同的两者等价
    *
    * map:
    * Map 集合类用于存储元素对(称作“键”和“值”),
    *其中每个键映射到一个值。
    *
    * 1.put(Object key, Object value) 将指定值与指定键相关联
    * 2.clear() 从 Map 中删除所有映射
    * 3.remove(Object key) 从 Map 中删除键和关联的值
    * 4.putAll(Map t) 将指定 Map 中的所有映射复制到此 map
      1 package com.first.javabeantomap;
      2 
      3 import com.first.javabean.Person;
      4 
      5 import java.beans.BeanInfo;
      6 import java.beans.IntrospectionException;
      7 import java.beans.Introspector;
      8 import java.beans.PropertyDescriptor;
      9 import java.lang.reflect.InvocationTargetException;
     10 import java.util.HashMap;
     11 import java.util.Iterator;
     12 import java.util.Map;
     13 import java.util.Set;
     14 
     15 /**
     16  * 实现Javabean和Map之间的转化
     17  * 1)Javabean拥有多组属性名和属性值
     18  *,每一个属性名对应一个属性值
     19  * 2)Map有多组key-value,
     20  * 每一个key对应一个value,可以是不同的两者等价
     21  *
     22  * map:
     23  * Map 集合类用于存储元素对(称作“键”和“值”),
     24  *其中每个键映射到一个值。
     25  *
     26  * 1.put(Object key, Object value)    将指定值与指定键相关联
     27  * 2.clear()    从 Map 中删除所有映射
     28  * 3.remove(Object key)    从 Map 中删除键和关联的值
     29  * 4.putAll(Map t)    将指定 Map 中的所有映射复制到此 map
     30  */
     31 public class JavaToMap {
     32 
     33     public static void main(String[] args)
     34             throws IllegalAccessException, IntrospectionException,
     35             InvocationTargetException, InstantiationException {
     36         //创建一个Person实例
     37         Person person=new Person();
     38         Map<String,Object> map=javabeanToMap(person);//throws IllegalAccessException, IntrospectionException, InvocationTargetException
     39         System.out.println(map);
     40 
     41         //创建javabean对象
     42 
     43         Object obj=mapToJavabean1(Person.class,map);
     44         System.out.println(obj);
     45 
     46         Person p=mapToJavabean2(Person.class,map);
     47         System.out.println(p);
     48 
     49     }
     50 
     51     /**
     52      * Javabean转化为Map
     53      * @return
     54      */
     55     public static Map<String ,Object> javabeanToMap(Object bean) throws IntrospectionException, InvocationTargetException, IllegalAccessException {
     56         Map<String ,Object> map=new HashMap<>();
     57         //获取javabean的对象
     58         BeanInfo beanInfo=Introspector.getBeanInfo(bean.getClass(),Object.class);
     59         //获取javabean中的属性描述器
     60         PropertyDescriptor[] descriptor=beanInfo.getPropertyDescriptors();
     61         for (PropertyDescriptor pds:descriptor){
     62             String name=pds.getName();
     63             //调用getter方法,获取属性值
     64             Object value=pds.getReadMethod().invoke(bean);//抛出异常
     65             map.put(name,value);
     66 
     67         }
     68         return map;
     69     }
     70 
     71     /**
     72      * Map转化为Javabean
     73      * 写法一
     74      * @return
     75      */
     76     private static Object mapToJavabean1(Class beanType,Map map) throws IllegalAccessException, InstantiationException, IntrospectionException, InvocationTargetException {
     77         //创建javabean对象
     78         BeanInfo beanInfo=Introspector.getBeanInfo(beanType,Object.class);//抛出异常
     79         Object obj=beanType.newInstance();
     80         //获取javabean的属性描述器
     81         PropertyDescriptor[] descriptors=beanInfo.getPropertyDescriptors();
     82         //给JavaBean对象赋值
     83         for (PropertyDescriptor pds:descriptors){
     84             //获取与属性同名的key值
     85             Object value=map.get(pds.getName());
     86             //调用setter方法
     87             pds.getWriteMethod().invoke(obj,value);//抛出异常
     88         }
     89 
     90         return obj;
     91     }
     92 
     93 
     94     /**
     95      * Map转化为Javabean
     96      * 写法二:推荐使用这种方法
     97      * 与第一种方法不同的是返回的时候进行了类型转化,方便用者
     98      * @return
     99      */
    100     private static <T>T mapToJavabean2(Class<T>beanType,Map<String,Object> map) throws IllegalAccessException, InstantiationException, IntrospectionException, InvocationTargetException {
    101         //创建javabean对象
    102         BeanInfo beanInfo=Introspector.getBeanInfo(beanType,Object.class);//抛出异常,Object.class不能少,-否则出现空指针异常
    103         Object obj=beanType.newInstance();
    104         //获取javabean的属性描述器
    105         PropertyDescriptor[] descriptors=beanInfo.getPropertyDescriptors();
    106         //给JavaBean对象赋值
    107         for (PropertyDescriptor pds:descriptors){
    108             //获取与属性同名的key值
    109             Object value=map.get(pds.getName());
    110             //调用setter方法
    111             pds.getWriteMethod().invoke(obj,value);//抛出异常
    112         }
    113         return (T)obj;//返回的时候强转
    114     }
    115 
    116 }
  • 相关阅读:
    echarts x轴文字显示不全(xAxis文字倾斜比较全面的3种做法值得推荐)
    从输入URL到页面加载的过程?由一道题完善自己的前端知识体系!
    浏览器多进程架构、浏览器内核多线程、js单线程、GUI 渲染线程 与 JavaScript引擎线程互斥 原理
    通过script src引入ElementUI时,使用语句:window.ELEMENT.MessageBox.alert(xxx) 调用弹出框
    计算2个日期之间的天数
    js 字符串转对象
    requestAnimationFrame 知识点
    vue项目权限控制
    css中权重与继承
    Flex Basis与Width的区别
  • 原文地址:https://www.cnblogs.com/archer-lcy/p/9183299.html
Copyright © 2020-2023  润新知