java 中 的反射,可以根据对象获取到类模板对象,
进而获取到类模板中定义的属性和方法,
并且可以实现对属性的赋值、方法的调用等动作。
本文利用此特性,封装一个工具方法,将普通的Java对象转为Map对象。
public class Book {
private Integer id;
private String name;
private Double price;
// 下面是 正常的 无参构造、有参构造、getter方法、setter方法、toString 方法
}
/**
* 对象转 Map 的方法
* @param obj
* @return
*/
public static Map<String,Object> covertObjectToMap(Object obj){
//要返回的 map 对象
Map<String,Object> objectMap = new HashMap<>();
// 获取目标对象的类型
Class<?> clazz = obj.getClass();
// 获取 类 的所有声明的属性
Field[] fields = clazz.getDeclaredFields();
// 遍历属性,进行map对象的创建
Arrays.stream(fields).forEach(field -> {
// 属性爆破
field.setAccessible(true);
try {
// map中存储属性及属性值
objectMap.put(field.getName(),field.get(obj));
} catch (IllegalAccessException e) {
e.printStackTrace();
}
});
//返回map
return objectMap;
}
import java.lang.reflect.Field;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
public class aa {
public static void main(String[] args) {
// 创建一个对象
Book book = new Book(100, "第一本书", 20.05d);
// 对象转map
Map<String, Object> bookMap = covertObjectToMap(book);
// 输出map
System.out.println("bookMap = " + bookMap);
}
/**
* 对象转 Map 的方法
* @param obj
* @return
*/
public static Map<String,Object> covertObjectToMap(Object obj){
//要返回的 map 对象
Map<String,Object> objectMap = new HashMap<>();
// 获取目标对象的类型
Class<?> clazz = obj.getClass();
// 获取 类 的所有声明的属性
Field[] fields = clazz.getDeclaredFields();
// 遍历属性,进行map对象的创建
Arrays.stream(fields).forEach(field -> {
// 属性爆破
field.setAccessible(true);
try {
// map中存储属性及属性值
objectMap.put(field.getName(),field.get(obj));
} catch (IllegalAccessException e) {
e.printStackTrace();
}
});
//返回map
return objectMap;
}
}
bookMap = {price=20.05, name=第一本书, id=100}
通过打印看到,对象转map成功!