zoukankan      html  css  js  c++  java
  • 运行时给java对象动态的属性赋值

    运行时给java对象动态的属性赋值 

    如何给java对象动态的属性赋值(也就是在代码执行的时候才决定给哪个属性赋值)

           

    1.自定义一个工具类ReflectHelper,代码如下所示:  

    package com.bxsurvey.process.util;
    import java.lang.reflect.Method;
    import java.util.Hashtable;
    import java.util.regex.Pattern;
    /**
    * @desc 通过反射来动态调用get 和 set 方法
    */
    public class ReflectHelper {
    private Class cls;
    /**
    * 传过来的对象
    */
    private Object obj;
    private Hashtable<String, Method> getMethods = null;
    private Hashtable<String, Method> setMethods = null;
    public ReflectHelper(Object o) {
    obj = o;
    initMethods();
    }
    public void initMethods() {
    getMethods = new Hashtable<String, Method>();
    setMethods = new Hashtable<String, Method>();
    cls = obj.getClass();
    Method[] methods = cls.getMethods();
    // 定义正则表达式,从方法中过滤出getter / setter 函数.
    String gs = "get(\w+)";
    Pattern getM = Pattern.compile(gs);
    String ss = "set(\w+)";
    Pattern setM = Pattern.compile(ss);
    // 把方法中的"set" 或者 "get" 去掉,$1匹配第一个
    String rapl = "$1";
    String param;
    for (int i = 0; i < methods.length; ++i) {
    Method m = methods[i];
    String methodName = m.getName();
    if (Pattern.matches(gs, methodName)) {
    param = getM.matcher(methodName).replaceAll(rapl).toLowerCase();
    getMethods.put(param, m);
    else if (Pattern.matches(ss, methodName)) {
    param = setM.matcher(methodName).replaceAll(rapl).toLowerCase();
    setMethods.put(param, m);
    else {
    // org.jeecgframework.core.util.LogUtil.info(methodName + " 不是getter,setter方法!");
    }
    }
    }
    public boolean setMethodValue(String property,Object object) {
    Method m = setMethods.get(property.toLowerCase());
    if (m != null) {
    try {
    // 调用目标类的setter函数
    m.invoke(obj, object);
    return true;
    catch (Exception ex) {
    ex.printStackTrace();
    return false;
    }
    }
    return false;
    }
    }  

    2.用法,假如现在要Person类中的name属性赋值

    ReflectHelper reflectHelper = new ReflectHelper(new Person());//创建工具类对象
    reflectHelper.setMethodValue("name""值");// 动态调用 set方法给文件对象内容赋值
  • 相关阅读:
    SVN 怎么让文件脱离 版本控制
    WEB开发中使用和理解 .net中的认证与授权
    三层,师姐把我点透了
    三层与养猪,加入自己的理解。
    Asp.net的登录验证方法Web.config访问权限配置
    <%=%> 引发的aspx文件、.aspx.cs文件和.aspx.designer.cs的一些说明
    bin。obj Properties文件夹
    JS得到对应字段 的值。遍历
    C#中页面传值的方法。转载
    $ is not function   和JQUERY 命名 冲突的解说 Jquer问题 (
  • 原文地址:https://www.cnblogs.com/chinaifae/p/10190012.html
Copyright © 2011-2022 走看看