利用java反射将map值封装到对象中

有时候我们需要将map里面的值依据键依次封装到对象里面。
这时需要简单的用下反射。
例子如下:

public void newLoadFromMap(Map<?,?> map) throws IllegalArgumentException, IllegalAccessException{
        try {
        Field[] fields = this.getClass().getDeclaredFields();//拿到对象所有的属性
        for(Field f: fields){//遍历属性并赋值,赋值前要先判断属性类型
             if (f.getGenericType().toString().equals(
              "class java.lang.String")) { // 如果type是类类型,则前面包含"class ",后面跟类名
             Object DBValue = null;
                DBValue = map.getOrDefault(f.getName(), null);//getOrdefault->jdk8新特性,map中如果包含这个键,取其值,如果不包含,取第二个参数(默认值)
                if (DBValue == null)
                    f.set(this, "");
                else
                    f.set(this,DBValue.toString());
            }
            // 如果类型是Integer
            if (f.getGenericType().toString().equals(
              "class java.lang.Integer")) {
             Object DBValue = null;
                DBValue = map.getOrDefault(f.getName(), null);
                if (DBValue == null)
                    f.set(this, null);
                else
                    f.set(this,Integer.parseInt(DBValue.toString()));
            }
            // 如果类型是Date
            if (f.getGenericType().toString().equals(
              "class java.sql.Timestamp")) {
             Object DBValue = null;
                DBValue = map.getOrDefault(f.getName(), null);
                if (DBValue == null)
                    f.set(this, null);
                else{
                    SimpleDateFormat s = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                    f.set(this,DateFormat.dateToTimestamp(s.parse(DBValue.toString()), "yyyy-MM-dd HH:mm:ss"));
                }
            }
        }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值