利用反射将Java对象转成Map集合
将java对象封装到map集合中有两种方案:
方案一:
先把对象的属性和属性值取出来,然后将对象的属性及属性值存储到Map集合中。这种方法比较简单粗暴,但是有一个弊端就是实体的属性比较多时,代码书写起来比较繁琐,不利于阅读。
方案二:
利用反射将java实体对象转成map集合,首先获取字节码对象Class,然后获取对象的所有属性值,其次获取对象的所有属性值,最后将属性和属性值封装到map集合中。这种方案可以解决方案一实体属性多的不足,效率比方案一更高。
话不多说,直接上代码:
//实体对象
private String name;
private int age;
private int sex;
setter方法和getter方法省略
/**
* 将java对象转成map集合
* @param bean
* @return
* @throws Exception
*/
public static Map<String, Object> beanConvertMap(Object bean) throws Exception {
Map<String, Object> dataMap = new HashMap<>();
// 获取bean的字节码对象
Class clazz = bean.getClass();
// 获取对象的所有属性
Field[] fields = clazz.getDeclaredFields();
for (int i = 0; i < fields.length; i++) {
// 获取对象的属性
Field field = fields[i];
// 打开私有访问
field.setAccessible(true);
// 获取对象的属性名称
String name = field.getName();
// 获取对象的属性值
Object value = field.get(bean);
// 将对象的属性和属性值封装到map集合中
dataMap.put(name, value);
}
return dataMap;
}
/**
* 测试方法
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception {
User user = new User();
user.setName("zhangsan");
user.setAge(18);
user.setSex(1);
// 将user对象封装到Map集合中
Map<String, Object> convertMap = beanConvertMap(user );
System.out.println(convertMap);
}
由于本人第一次写博客,如有写的不好的地方忘各位大神指正,欢迎互相学习!