User类:
public class User {
private String name;
private String sex;
private String password;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
", sex='" + sex + '\'' +
", password='" + password + '\'' +
'}';
}
}
Demo类
import org.junit.Test;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.Map;
public class Demo {
Map<String,String> map = new HashMap<>();
@Test
public void fun1() throws ClassNotFoundException, NoSuchMethodException, InvocationTargetException, IllegalAccessException {
//假数据,假设map中已存在如下数据
map.put("name","小王");
map.put("sex","男");
map.put("password","123456");
User user = new User();
// 实例化User类对象
Class<?> aClass = Class.forName("User");
//获得User类中的所有属性
Field[] userFields = aClass.getDeclaredFields();
//改变属性类型
for (int i = 0;i < userFields.length;i++){
userFields[i].setAccessible(true);
}
//遍历循环map集合,如果存在key和User类内属性名相同,则调用setXXX方法,给属性赋值
for (Map.Entry<String, String> entry : map.entrySet()) {
if (isEquals(entry.getKey(),userFields)){
Method method=aClass.getMethod("set"+ entry.getKey().substring(0, 1).toUpperCase()+entry.getKey().substring(1),String.class);
method.invoke(user,entry.getValue());
}
}
//输出User
System.out.println(user);
}
/**
* 判断map里的键名是否等于实体内的某个属性名
* @param key
* @param userFields
* @return
*/
public boolean isEquals(String key, Field[] userFields){
for (int i = 0;i < userFields.length;i++){
if (key.equals(userFields[i].getName())){
return true;
}
}
return false;
}
}
结果: