java实体类转map_如何通过反射机制实现Map转换为Bean

cd448bfc665983fc56114dd0f2b356a8.png

利用反射机制将map转换为bean

在Java的世界里,将一个Map转换为Bean有很多种实现方法。因为针对这个转换,很多开源项目中都提供工具类来实现,例如Spring、Gson等等。

虽然很多工具类都提供了此类方法,但是对于基础的实现原理,我仍觉得有必要了解一下,免得出现“知其然,而不知其所以然”的情况。

对于反射而言,首先需要明确到底是在反射什么?例如一个Map对象和一个Person实体对象,反射的实质是Map中Key和Person中同名属性的反射,通过java.lang.reflect来实现上述转换过程。

代码如下:

/** * 对象实体类 * @author www.51sds.net */public class Person {    private String name;    private int age;    private String address;    public String getName(){        return name;    }    public void setName(String name){        this.name = name;    }    public int getAge(){         return age;     }     public void setAge(int age){         this.age = age;     }     public String getAddress(){         return address;     }     public void setAddress(String address){         this.address = address;     }     @Override     public String toString(){         return "Person{" +            "name='" + name + ''' +            ", age=" + age +            ", address='" + address + ''' +        '}';    }}
import java.lang.reflect.Field;import java.util.HashMap;import java.util.Map;/** * map转换为bean工具类 * @author www.51sds.net */public  class MapToBeanUtil {    public static void main(String[] args) {        Map map = new HashMap<>();        map.put("name", "张三");        map.put("age", 30);        map.put("address", "北京");        Person person = toBean(map, Person.class);        System.out.println(person);    }         public static  T toBean(Map beanPropMap, Class type) {         try {             T beanInstance = type.getConstructor().newInstance();             for (Object k : beanPropMap.keySet()) {                 String key = (String) k;                 Object value = beanPropMap.get(k);                 if (value != null) {                     try {                         Field field = type.getDeclaredField(key);                         field.setAccessible(true);                         field.set(beanInstance, value);                         field.setAccessible(false);                     } catch (Exception e) {                         e.printStackTrace();                     }                 }             }             return beanInstance;         } catch (Exception e) {             e.printStackTrace();         }      return null;     }}
/** * 输出结果 * @author www.51sds.net  */Person{name=’张三’, age=30, address=’北京’}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值