java反射机制动态设置类的属性值



1.实体类

public class ReflectModel {
 private String fdUserName;
 private String fdUserPwd;
 private String fdAge;
 private String fdSex;
 public String getFdUserName() {
  return fdUserName;
 }
 public void setFdUserName(String fdUserName) {
  this.fdUserName = fdUserName;
 }
 public String getFdUserPwd() {
  return fdUserPwd;
 }
 public void setFdUserPwd(String fdUserPwd) {
  this.fdUserPwd = fdUserPwd;
 }
 public String getFdAge() {
  return fdAge;
 }
 public void setFdAge(String fdAge) {
  this.fdAge = fdAge;
 }
 public String getFdSex() {
  return fdSex;
 }
 public void setFdSex(String fdSex) {
  this.fdSex = fdSex;
 } 
}

2.利用反射机制动态给实体类所有属性赋值

public class ReflectTest {

 /**
  * @param args
  */
 public static void main(String[] args) {
  // TODO Auto-generated method stub
  ReflectModel model = new ReflectModel();
  Field[] field = model.getClass().getDeclaredFields(); // 获取实体类的所有属性
  String fdUserName = "zhouzj";
  String fdUserPwd = "123";
  String fdAge = "18";
  String fdSex = "男";
  String[] strArray = new String[]{fdUserName,fdUserPwd,fdAge,fdSex};
  Map<String , String> map1 = new HashMap<String, String>();
  for(int i=0;i<field.length;i++){
   String key = field[i].getName();
   map1.put(key, strArray[i]);
  }
  try {
   for (int j = 0; j < field.length; j++) {
    String name = field[j].getName(); //获取属性名
    String oldName = name;
    System.out.println("field name:" + name);
    name = name.substring(0, 1).toUpperCase() + name.substring(1);
    String type = field[j].getGenericType().toString(); //获取属性的类型
    if (type.equals("class java.lang.String")) { // 如果type是类类型,则class后面跟类名         
     Method m = model.getClass().getMethod("set" + name,
        String.class);    
     m.invoke(model, map1.get(oldName));              
    }
   }
   for (Field field2 : field) {//输出属性值,方法1
    String name = field2.getName();
    field2.setAccessible(true);
    System.out.println("方法1输出"+name + " value:" + field2.get(model));
   }
   for (Field field2 : field) {//输出属性值,方法2
    String name = field2.getName();    
    name = name.substring(0, 1).toUpperCase() + name.substring(1);
    Method m = model.getClass().getMethod("get" + name);
    String val = (String) m.invoke(model);
    System.out.println("方法2输出"+name + " value:" + val);
   }
  } catch (NoSuchMethodException e) {
   e.printStackTrace();
  } catch (SecurityException e) {
   e.printStackTrace();
  } catch (IllegalAccessException e) {
   e.printStackTrace();
  } catch (IllegalArgumentException e) {
   e.printStackTrace();
  } catch (InvocationTargetException e) {
   e.printStackTrace();
  }
 }
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值