java map转java bean对象

map转换为java bean对象

map格式Map<String,String>
bean声明在下面
写这个东西的原因就是因为最近上班了,学/用java了,学习了心仪已久的java反射,这里使用它来制作一个简单的map转java bean对象的,小demo.需要你对java 以及java反射机制有简单的了解(我的命名很渣渣^ ^)

//java bean声明
package test;

public class Chen {
    private String name;
    private String sex;
    private Integer age;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getSex() {
        return sex;
    }
    public void setSex(String sex) {
        this.sex = sex;
    }
    public Integer getAge() {
        return age;
    }
    public void setAge(Integer age) {
        this.age = age;
    }
}
package test;

import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

public class Main1 {
    public static void main(String[] args) {
        Map<String , String> map = new HashMap<String, String>();
        map.put("name", "小陈");
        map.put("sex", "man");
        map.put("age", "10");
        Chen chen = null;
        try {
            chen = (Chen) objectSwitch(map, Chen.class);
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        System.out.printf("%s %s %s\n",chen.getName() , chen.getSex() , chen.getAge());
    }
    private static Object objectSwitch(Map<String ,String> map , Class c) throws Exception{
        Object o = null;
        try {
            o = c.newInstance();   //创建对象
        } catch (InstantiationException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        Field[] fields = c.getDeclaredFields(); //获得所有属性字段
        ArrayList<String> list = new ArrayList<String>();
        for(Field f : fields){
            list.add(f.getName());
            f.setAccessible(true);
        }
        int i = 0;
        for(String str : list){
            if(map.get(str) != null){
                try {//暂时没有找到直接获取Fields直接获取属性类型的方法
                    fields[i].set(o, fun(fun1(fields[i].getType().toString()), map.get(str)));
                    //给它创建一个对象,可能对象里面的数据是空,也很有可能抛出异常
                    i++;
                } catch (IllegalArgumentException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } catch (IllegalAccessException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }
        return o;
    }
    private static Object fun(Class c , String str)throws Exception{
        Constructor constructor = c.getConstructor(str.getClass());
        Object obj = constructor.newInstance(str);
        return obj;
    }
    private static Class fun1(String str){
        String strTmp = str.substring(6, str.length()); //如果对6有疑惑,直接输出str就会好了
        try {
            return Class.forName(strTmp);
        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return null;
    }
}
程序结果:
小陈 man 10

当然这程序也有一定的问题就是没有测试,基本类型.应该基本类型是会出现问题的,这个程序不考虑性能,应该能应对大部分情况.由于刚开始工作时间不够充裕(懒的接口),异常还有命名并不够规范.如果不正确或者疑惑您都可以联系我,一起交流学习chenguoqide@qq.com

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值