反射机制:遍历map,给属性赋值

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;
        }
}

结果:
这里写图片描述

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值