快速业务通道

Java小例子:根据Map对象的内容创建JavaBean - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-17

Java小例子:根据Map对象的内容创建JavaBean

时间:2011-06-10 csdn博客 YidingHe

Java 提供 java.beans.Introspector 类,帮助我们分析 JavaBean 类当中 有哪些属性,通过它可以方便的对 JavaBean 对象属性进行取值和赋值操作。下 面是一个例子,根据 Map 对象中的内容创建 JavaBean 对象。

01.import java.beans.BeanInfo;
02.import java.beans.IntrospectionException;
03.import java.beans.Introspector;
04.import java.beans.PropertyDescriptor;
05.import java.util.HashMap;
06.import java.util.Map;
07.import java.lang.reflect.InvocationTargetException;
08.
09.public class MapToBean {
10.
11.    public static void main(String[] args) throws Exception {
12.        Map<Object, Object> map = new HashMap<Object, 

Object>();
13.        map.put("name", "张三");
14.        map.put("age", 30);
15.        Person p = convertMap(Person.class, map);
16.        System.out.println(p.getName() + ", " + p.getAge

());
17.    }
18.
19.    /**
20.     * 将一个 Map 对象转化为一个 JavaBean
21.     *
22.     * @param type 要转化的类型
23.     * @param map  包含属性值的 map
24.     *
25.     * @return 转化出来的 JavaBean 对象
26.     *
27.     * @throws IntrospectionException    如果分析类属性失败
28.     * @throws IllegalAccessException    如果实例化 JavaBean 失败
29.     * @throws InstantiationException    如果实例化 JavaBean 失败
30.     * @throws InvocationTargetException 如果调用属性的 setter 方法

失败
31.     */
32.    private static <T> T convertMap(Class<T> type, 

Map<Object, Object> map)
33.            throws IntrospectionException, IllegalAccessException,
34.            InstantiationException, InvocationTargetException {
35.        BeanInfo beanInfo = Introspector.getBeanInfo(type); // 获取

类属性
36.        T t = type.newInstance();   // 创建 JavaBean 对象
37.
38.        // 给 JavaBean 对象的属性赋值
39.        for (PropertyDescriptor descriptor : 

beanInfo.getPropertyDescriptors()) {
40.            String propertyName = descriptor.getName();
41.            if (map.containsKey(propertyName)) {
42.                // 下面一句可以 try 起来,这样当一个属性赋值失败的

时候就不会影响其他属性赋值。
43.                descriptor.getWriteMethod().invoke(t, map.get

(propertyName));
44.            }
45.        }
46.        return t;
47.    }
48.}
49.
50.class Person {
51.
52.    private String name;
53.
54.    private int age;
55.
56.    public String getName() {
57.        return name;
58.    }
59.
60.    public void setName(String name) {
61.        this.name = name;
62.    }
63.
64.    public int getAge() {
65.        return age;
66.    }
67.
68.    public void setAge(int age) {
69.        this.age = age;
70.    }
71.}

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号