思考如何实现将Map<String,Object>转换为javabean
Map:也称之为映射,内部的元素是以键值对为结构存储,可以通过key获取map中的value;Key不允许重复;但是值是可以重复的。
javabean:JavaBean 是一种JAVA语言写成的可重用组件。JavaBean 通过提供符合一致性设计模式的公共方法将内部域暴露成员属性。属性名称符合这种模式,其他Java 类可以通过自身机制发现和操作这些JavaBean 属性。
public class MapToBeans {
public static <T> T getObject(Map<String, Object> map,Class<T> t) {
T obj=null;
try {
//创建对象中的所有字段
obj=t.newInstance();
//获取对象中的所有字段
Field[] field=t.getDeclaredFields();
for (Field f : field) {
String fname=f.getName();
Object value=map.get(fname);
//设置属性可访问
f.setAccessible(true);
//为目标对象设置值
f.set(obj, value);
}
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
return obj;
}
}
用户类:
public class User {
private int id;
private String username;
private String password;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString() {
return "id=" + id + ", username=" + username + ", password=" + password ;
}
}
测试:
public static void main(String[] args) {
Map<String, Object> map=new HashMap<String, Object>();
map.put("id", 10);
map.put("username", "admin");
map.put("password", "123456");
User user=getObject(map, User.class);
System.out.println(user);
}