java中Bean类和Map的相互转换

  1 package com.studey.mapTbean;
  2
  3 import java.beans.BeanInfo;
  4 import java.beans.IntrospectionException;
  5 import java.beans.Introspector;
  6 import java.beans.PropertyDescriptor;
  7 import java.lang.reflect.InvocationTargetException;
  8 import java.lang.reflect.Method;
  9 import java.util.HashMap;
 10 import java.util.Map;
 11
 12 public class BeanUtil {
 13
 14     public static void main(String[] args) throws Exception {
 15
 16         Map<String, Object> mp = new HashMap<String, Object>();
 17         mp.put("name", "Tom Cat");
 18         mp.put("addr", 178);
 19         mp.put("tel", "123456");
 20
 21         PersonBean person = map2Bean(mp, PersonBean.class);
 22         System.out.println("transMap2Bean Map Info:");
 23         for (Map.Entry<String, Object> entry : mp.entrySet()) {
 24             System.out.println(entry.getKey() + ": " + entry.getValue());
 25         }
 26         System.out.println("Bean Info:");
 27         System.out.println("name: " + person.getName());
 28         System.out.println("addr: " + person.getaddr());
 29         System.out.println("mN: " + person.gettel());
 30
 31         bean2Map(person, mp);
 32         System.out.println("transBean2Map Map Info:");
 33         for (Map.Entry<String, Object> entry : mp.entrySet()) {
 34             System.out.println(entry.getKey() + ": " + entry.getValue());
 35         }
 36     }
 37
 38     // mapToBean方法:
 39
 40     public static <T, K, V> T map2Bean(Map<K, V> mp, Class<T> beanCls)
 41             throws Exception, IllegalArgumentException, InvocationTargetException {
 42         T t = null;
 43         try {
 44
 45             BeanInfo beanInfo = Introspector.getBeanInfo(beanCls);
 46             PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();
 47
 48             t = beanCls.newInstance();
 49
 50             for (PropertyDescriptor property : propertyDescriptors) {
 51                 String key = property.getName();
 52
 53                 if (mp.containsKey(key)) {
 54                     Object value = mp.get(key);
 55                     Method setter = property.getWriteMethod(); 56        57                     setter.invoke(t, value);
 58                 }
 59             }
 60
 61         } catch (IntrospectionException e) {
 62
 63             e.printStackTrace();
 64         }
 65         return t;
 66     }
 67
 68     // beanToMap方法:
 69
 70     public static <T, K, V> Map<String, Object> bean2Map(T bean, Map<String, Object> mp)
 71             throws Exception, IllegalAccessException {
 72
 73         if (bean == null) {
 74             return null;
 75         }
 76
 77         try {
 78             BeanInfo beanInfo = Introspector.getBeanInfo(bean.getClass());
 79             PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();
 80
 81             for (PropertyDescriptor property : propertyDescriptors) {
 82                 String key = property.getName();
 83
 84                 if (!key.equals("class")) {
 85
 86                     Method getter = property.getReadMethod(); 87                                                                  88                     Object value;
 89
 90                     value = getter.invoke(bean);
 91                     mp.put(key, value);
 92                 }
 93
 94             }
 95
 96         } catch (IntrospectionException e) {
 97
 98             e.printStackTrace();
 99         } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException e) {
100            101             e.printStackTrace();
102
103         }
104         return mp;
105
106     }
107 }
 1 package com.studey.mapTbean;
 2
 3 public class PersonBean {
 4     private String name;
 5     private Integer addr;
 6     private String tel;
 7
 8     public String getName() {
 9         return name;
10     }
11
12     public void setName(String name) {
13         this.name = name;
14     }
15
16     public Integer getaddr() {
17         return addr;
18     }
19
20     public void setaddr(Integer addr) {
21         this.addr = addr;
22     }
23
24     public String gettel() {
25         return tel;
26     }
27
28     public void settel(String tel) {
29         this.tel = tel;
30     }
31
32 } 

运行结果:

 1 transMap2Bean Map Info:
 2 name: Tom Cat
 3 tel: 123456
 4 addr: 178
 5 Bean Info:
 6 name: Tom Cat
 7 addr: 178
 8 mN: 123456
 9 transBean2Map Map Info:
10 name: Tom Cat
11 tel: 123456
12 addr: 178
时间: 2024-10-12 09:53:25

java中Bean类和Map的相互转换的相关文章

java实现Bean类和Map的相互转换

创建类PersonBean,有属性name,age和mN,生成get和set方法 主方法 map2Bean方法: Bean2map方法: 测试结果: 总结: javaBean与Map<String,Object>互转利用到了java的内省( Introspector )和反射(reflect)机制. 其思路为: 通过类 Introspector 来获取某个对象的 BeanInfo 信息,然后通过 BeanInfo 来获取属性的描述器 PropertyDescriptor,再利用属性描述器获取某

java使用泛型实现Bean类和Map的相互转换

java使用泛型实现Bean类和Map的相互转换,使用泛型可以这带来了很多好处: 首要就是类型安全, Java 程序的类型安全.通过知道使用泛型,这些假设就只存在于程序员的头脑中(或者如果幸运的话,还存在于代码注释中).       泛型允许编译器实施这些附加的类型约束.类型错误现在就可以在编译时被捕获了,而不是在运行时当作 ClassCastException 展示出来.   将类型检查从运行时挪到编译时有助于您更容易找到错误,并可提高程序的可靠性. 消除强制类型转换. 泛型的一个附带好处是,

Java中Properties类

Java中Properties类简介 知识学而不用,就等于没用,到真正用到的时候还得重新再学. Properties类继承自Hashtable,如下: 它主要用于读取Java的配置文件,由于配置文件中的很多变量时经常改变的,通过这个类可以让用户脱离程序本身去修改相关的变量配置.在Java中,其配置文件常为.properties文件,格式为文本文件,内容的格式为“键=值”的格式,#打头的是注释行,Properties会忽略注释.允许只有key没有value,没有value时,value会被set成

Java中的Collection和Map(二)--List体系

正如我们在Java中的Collection和Map(一)中所看到的那样,我们经常使用的有ArrayList.LinkedList.Vector.Stack.这里不再累述它们的使用方法,这里主要是说一下他们的底层结构以及使用时机. 1.ArrayList 我们都知道ArrayList是我们经常使用的List集合之一.我们在使用的时候经常通过 new ArrayList() 方法来创建一个ArrayList集合,然后调用它的 add(E e) 方法向集合中存储元素.那么你是否了解当我们使用 new

hadoop中Text类 与 java中String类的区别

hadoop 中 的Text类与java中的String类感觉上用法是相似的,但两者在编码格式和访问方式上还是有些差别的,要说明这个问题,首先得了解几个概念: 字符集: 是一个系统支持的所有抽象字符的集合.字符是各种文字和符号的总称,包括各国家文字.标点符号.图形符号.数字等.例如 unicode就是一个字符集,它的目标是涵盖世界上所有国家的文字和符号: 字符编码:是一套法则,使用该法则能够对自然语言的字符的一个集合(如字母表或音节表),与其他东西的一个集合(如号码或电脉冲)进行配对.即在符号集

Java中String类学习总结

java中String类的使用频率非常高,本人在学习此模块时,认为下列几点知识值得注意: 一.String是不可变对象 java.lang.String类使用了final修饰,不能被继承.Java程序中的所有字面值,即双引号括起的字符串,如"abc",都是作为String类的实例实现的.String是常量,其对象一旦构造就不能再被改变.换句话说,String对象是不可变的,每一个看起来会修改String值的方法,实际上都是创造了一个全新的String对象,以包含修改后的字符串内容.而最

【转载】Java中String类的方法及说明

转载自:http://www.cnblogs.com/YSO1983/archive/2009/12/07/1618564.html String : 字符串类型 一.构造函数     String(byte[ ] bytes):通过byte数组构造字符串对象.     String(char[ ] value):通过char数组构造字符串对象.     String(Sting original):构造一个original的副本.即:拷贝一个original.     String(Strin

java中Color类的简单总结

java中Color类的简单总结 1.颜色的常识 任何颜色都是由三原色组成(RGB),JAVA中支持224为彩色,即红绿蓝分量取值 介于0-255之间(8位表示) 2.Color类中的常量 public final static Color black = new Color(0,0,0); public final static Color bule = new Color(0,0,255); . . 有很多这样的常量,可供我们直接类名去调用而不需要去实例化. 3.Color中的构造函数 pu

Java中Arrays类的两个方法:deepEquals和equals

deepEquals和equals是Java中Arrays类的两个静态方法,可是它们之间有什么样的区别呢? 代码一. import java.util.Arrays; public class Test { public static void main(String[] args) { String[][] name1 = {{ "G","a","o" },{ "H","u","a",