java基础—-利用注解和反射把map封装成bean

java基础—-利用注解和反射把map封装成bean

利用注解可以解决属性名和map键值不匹配的问题

public class mapToBean {

public static void main(String[] args) {

Map<String,Object> map=new HashMap<>();
map.put("empno",35232);
map.put("ename","张三");
map.put("job","工作");
Employee employee = mapToBean(map, Employee.class);
System.out.println(employee);
}
public static <T> T mapToBean(Map<String,Object> map,Class<T> cls){

T t=null;
try {

//创建实例
t = cls.newInstance();
//获取类上的所有字段
Field[] fields = cls.getDeclaredFields();
if(fields !=null && fields.length>0){

//遍历字段数组
for (Field field : fields) {

if(field.isAnnotationPresent(Column.class)){

Column annotation = field.getAnnotation(Column.class);
if(annotation !=null){

//获取值
String key = annotation.value();
//将注解中的值作为map的键查找map中的值
Object value = map.get(key);
if(value !=null){

//说明map中包含这个注解作为键的值,那么我们就映射到bean中
String fieldName = field.getName();
//通过内省映射
PropertyDescriptor pd=new PropertyDescriptor(fieldName,cls);
Method writeMethod = pd.getWriteMethod();
writeMethod.invoke(t,value);
}
}
}else {

//如果不存在注解,那就用字段名去map中取值
String name = field.getName();
Object value = map.get(name);
if(value !=null){

//说明map中包含这个注解作为键的值,那么我们就映射到bean中
String fieldName = field.getName();
//通过内省映射
PropertyDescriptor pd=new PropertyDescriptor(fieldName,cls);
Method writeMethod = pd.getWriteMethod();
writeMethod.invoke(t,value);
}
}
}
}
} catch (Exception e) {

e.printStackTrace();
}
return t;
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/2354.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号