运行时给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 ...
随机推荐
- P1273 有线电视网[分组背包+树形dp]
题目描述 某收费有线电视网计划转播一场重要的足球比赛.他们的转播网和用户终端构成一棵树状结构,这棵树的根结点位于足球比赛的现场,树叶为各个用户终端,其他中转站为该树的内部节点. 从转播站到转播站以及从 ...
- 12 复习 - webpack基本配置1
1.npm包管理工具 npm init -y 如果创建的项目的根目录名称是中文或者包含中文,不能使用-y npm init 回车时要求你输入包的名称,自己手写项目名称,例test 2.新建src,di ...
- PL/SQL嵌入SQL语句
一.PL/SQL块中只能直接嵌入SELECT.DML(INSERT,UPDATE,DELETE)以及事务控制语句(COMMIT,ROLLBACK,SAVEPOINT), 而不能直接嵌入DDL语句(CR ...
- Python 装饰器实现单列模式
# 使用装饰器实现单列模式 def singleton(cls): # 用来存在实例的字典 singleton_instance = {} def wrapper(*args, **kwargs): ...
- 005_simulink建立条件子系统
1. 条件执行子系统 a) 使能子系统:是控制信号大于零时执行的子系统.在控制信号穿越零点由负变正的时步点上,使能子系统开始执行.只要子系统的控制信号保持正值,使能子系统就会保持在执行的状态 b) ...
- HTML怎么块外横向剧中
HTML 块外横向剧中 在HTML中有一个块外横向剧中的代码 那就是margin:0 auto 这个能是块内元素横向剧中 剧中前: 剧中后
- ES 的基本用法
ES的基本用法 ES的基本概念 1> 集群和节点 一个es集群是由一个或多和es节点组成的集合 每一个集群都有一个名字, 如之前的wali 每个节点都有自己的名字, 如之前的master, sl ...
- 三十六.MHA集群概述 、 部署MHA集群 测试配置
1.准备MHA集群环境 准备6台虚拟机,并按照本节规划配置好IP参数 在这些虚拟机之间实现SSH免密登录 在相应节点上安装好MHA相关的软件包 使用6台RHEL 7虚拟机,如图-1所示.准备集群环 ...
- Oracle的dual是什么东西啊??(答:伪表)
1. dual 确实是一张表.是一张只有一个字段,一行记录的表.2.习惯上,我们称之为'伪表'.因为他不存储主题数据.3. 他的存在,是为了操作上的方便.因为select 都是要有特定对象的.如:se ...
- [Luogu] 仓鼠找sugar
https://www.luogu.org/problemnew/show/3398 树剖练习题,两个懒标记,搜索时序为全局懒标记 #include <bits/stdc++.h> usi ...