package demo;
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
import java.util.HashMap;
import java.util.Map;
/**
* 利用反射实现
* Map 与 JavaBean 的相互转换
*/
public class ConvertUtil {
/**
* map 转 JavaBean
*
* @param map
* @param beanClass
* @param <T>
* @return
*/
public static <T> T mapToObject(Map<String, Object> map, Class<T> beanClass) {
if (map == null) return null;
try {
T instance = beanClass.newInstance();
// 获取声明的字段
Field[] fields = instance.getClass().getDeclaredFields();
if (null != fields && fields.length > 0) {
for (Field field : fields) {
// 获取修饰符
int modifiers = field.getModifiers();
// 不能是static或者final
if (Modifier.isStatic(modifiers) || Modifier.isFinal(modifiers)) {
continue;
}
// 允许访问私有属性
field.setAccessible(true);
if (map.containsKey(field.getName())) {
field.set(instance, map.get(field.getName()));
}
}
}
return instance;
} catch (InstantiationException | IllegalAccessException e) {
e.printStackTrace();
}
return null;
}
/**
* Bean 转 Map
* @param obj
* @return
*/
public static Map<String, Object> objectToMap(Object obj) {
Class<?> beanClass = obj.getClass();
Map<String, Object> result = new HashMap<>();
// 获取到所有字段,不包括继承字段
Field[] fields = beanClass.getFields();
try {
for (Field field : fields) {
field.setAccessible(true);
result.put(field.getName(), field.get(obj));
}
return result;
} catch (IllegalAccessException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
}
利用反射实现 Map 与 JavaBean 的相互转换
最新推荐文章于 2024-07-02 00:50:11 发布