运行时给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方法给文件对象内容赋值运行时给java对象动态的属性赋值的更多相关文章
- 使用C#表达式树为两个对象的相同属性赋值
//缓存表达式树 private static Dictionary<string, object> objCache = new Dictionary<string, object ...
- java对象生成随意属性值
public class RandomObjectValue { public static <T> T getObject(Class<?> clazz) { T t = n ...
- JS-给对象动态添加属性
var obj = {};//用来存放获取到所填写的信息 btn.onclick = function(){ var city = input_city.value; var num = input_ ...
- js对象动态添加属性,方法
1. 动态添加属性,方法 var object = new Object(); object.name = "name"; object.age = 19; >>> ...
- 将对象a的属性赋值给对象b
BeanUtils.copyProperties(a,b); 将a的属性赋值给b(ab的共同属性)
- js为Object对象动态添加属性和值 eval c.k c[k]
const appendInfo = () => { const API_SECRET_KEY = 'https://github.com/dyq086/wepy-mall/tree/maste ...
- Java对象依次取出属性,并去掉特殊字符
工作里从数据库往前台调数据的时候,庞大的数据量里难免有些字段里包含空格或者一些特殊字符,在前台显示出来会非常不美观,所以在此记录一个去对象内所有属性特殊字符的方法: //获得该对象属性的集合 Fiel ...
- java对象的方法属性和代码块的加载顺序
1.静态变量 2.静态代码块 3.局部代码块 4.构造函数 5.普通代码块 6.静态方法 7.普通方法 8.普通属性 for example: package com.JavaTest2; publi ...
- FastJson只序列化java对象的部分属性
public class Student { private int id; private String name; private int age; //get set方法略 } 如下方法: St ...
随机推荐
- P2280 [HNOI2003]激光炸弹[前缀和]
题目描述 输入输出格式 输入格式: 输入文件名为input.txt 输入文件的第一行为正整数n和正整数R,接下来的n行每行有3个正整数,分别表示 xi,yi ,vi . 输出格式: 输出文件名为out ...
- QQ龙虎榜数据接口
1.个股全部上榜日期 strUrl.Format(L"http://stock.finance.qq.com/cgi-bin/sstock/q_lhb_js?t=1&c=%06d&q ...
- bzoj3097 hash killer 1——构造题
题意 在 $u64$ 自然溢出下,请输出一串字符串和 $L$,使得对任意 $Base$ 都能找到两个长度为 $L$ 的字串的 $Hash$ 值相同. 分析 $u64$ 自然溢出等价于两个哈希值模 $2 ...
- Python pip 虚拟环境使用
安装: pip install virtualenv 使用,创建虚拟环境: cd project_dir virtualenv venv #venv为虚拟环境 目录名自定义 virtualenv -p ...
- 原生JS实现简易随机点名功能
定时器的工作原理,这里将用引用How JavaScript Timers Work中的例子来解释定时器的工作原理,该图为一个简单版的原理图.· 上图中,左侧数字代表时间,单位毫秒:左侧文字代表某一个操 ...
- 通过反射获取DataSource里数据源的账号密码
public Connection getDbConnection() { Connection conn = null; // 获得连接 DataSource ds = null; try { Co ...
- Lavavel Lifecycle
- CSP初赛复习
初赛复习 初赛一定要过啊,否则付出的那么多都白搭了! while(1) ++csp.rp,++csp.luck,++csp.scores; 历史 2020年开始,除NOIP以外的NOI系列其他赛事(包 ...
- Bzoj 3123: [Sdoi2013]森林(主席树+启发式合并)
3123: [Sdoi2013]森林 Time Limit: 20 Sec Memory Limit: 512 MB Description Input 第一行包含一个正整数testcase,表示当前 ...
- 【算法】变邻域搜索算法(Variable Neighborhood Search,VNS)超详细一看就懂的解析
更多精彩尽在微信公众号[程序猿声] 变邻域搜索算法(Variable Neighborhood Search,VNS)一看就懂的解析 00 目录 局部搜索再次科普 变邻域搜索 造轮子写代码 01 局部 ...