运行时给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方法给文件对象内容赋值

运行时给java对象动态的属性赋值的更多相关文章

  1. 使用C#表达式树为两个对象的相同属性赋值

    //缓存表达式树 private static Dictionary<string, object> objCache = new Dictionary<string, object ...

  2. java对象生成随意属性值

    public class RandomObjectValue { public static <T> T getObject(Class<?> clazz) { T t = n ...

  3. JS-给对象动态添加属性

    var obj = {};//用来存放获取到所填写的信息 btn.onclick = function(){ var city = input_city.value; var num = input_ ...

  4. js对象动态添加属性,方法

    1. 动态添加属性,方法 var object = new Object(); object.name = "name"; object.age = 19; >>> ...

  5. 将对象a的属性赋值给对象b

    BeanUtils.copyProperties(a,b); 将a的属性赋值给b(ab的共同属性)

  6. js为Object对象动态添加属性和值 eval c.k c[k]

    const appendInfo = () => { const API_SECRET_KEY = 'https://github.com/dyq086/wepy-mall/tree/maste ...

  7. Java对象依次取出属性,并去掉特殊字符

    工作里从数据库往前台调数据的时候,庞大的数据量里难免有些字段里包含空格或者一些特殊字符,在前台显示出来会非常不美观,所以在此记录一个去对象内所有属性特殊字符的方法: //获得该对象属性的集合 Fiel ...

  8. java对象的方法属性和代码块的加载顺序

    1.静态变量 2.静态代码块 3.局部代码块 4.构造函数 5.普通代码块 6.静态方法 7.普通方法 8.普通属性 for example: package com.JavaTest2; publi ...

  9. FastJson只序列化java对象的部分属性

    public class Student { private int id; private String name; private int age; //get set方法略 } 如下方法: St ...

随机推荐

  1. jade注释

    在jade里面注释是有多种方式的 单行注释,加两个//,跟js里面一样 //h1.title#title imoock jade study => <!--h1.title#title i ...

  2. CentOs 6语言改成中文

    1.在root权限下 切换到root下:su - root 查看当前语言环境:locale -a  (注意中间有空格) 如果看到 zh_CN.UTF-8(这个是中文简体)说明你的系统支持中文语言: 没 ...

  3. Python之Linux命令

    1.查看当前文件路径  :  pwd LangYingdeMacBook-Pro:Users langying$ pwd /Users 2.切换目录 cd 例如:切换到根目录  : cd /   回到 ...

  4. Vue IE11 报错 Failed to generate render function:SyntaxError: 缺少标识符 in

    报错截图: 查了篇文章(https://blog.csdn.net/weixin_42018057/article/details/81385121),遇到的情况跟文章里描述的类似,他提供的方法是:需 ...

  5. 【安卓进阶】Product Flavor基础玩法

    在安卓项目开发中,大多时候总是有测试环境.生产环境之类的区别,在不使用Product Flavor时,我们一般都是通过手工改动代码来实现测试环境.生产环境的切换. 这样就造成了项目管理上的不便,频繁的 ...

  6. GreenPlum 数据库启动关闭及数据库状态检查

    本篇文章主要记录GreenPlum数据库的启动.关闭及状态查询.GreenPlum数据库提供gpstart和gpstop脚本来启动和关闭数据库,可以通过—help参数来查看这些脚本的帮助信息. vie ...

  7. oracle的jdbc.properties文件配置

    ----------Oracle #do Oracle JDBC jdbc.driverClassName=oracle.jdbc.driver.OracleDriverjdbc.url=jdbc:o ...

  8. *51nod 1815

    从若干个数中选出最大的任意两数取模之后的结果 严格次大值 对于此题 首先缩点 然后拓扑排序 维护到达每个点的最大值与严格次大值 感觉思路与代码都OK啊 then.... #include <io ...

  9. scrapy 分布式爬虫- RedisSpider

    爬去当当书籍信息 多台机器同时爬取,共用一个redis记录 scrapy_redis 带爬取的request对象储存在redis中,每台机器读取request对象并删除记录,经行爬取.实现分布式爬虫 ...

  10. 微信小程序向本地保存

    提示框: wx.showToast(OBJECT) 显示消息提示框 wx.saveImageToPhotosAlbum({ filePath : "./test.png", //这 ...