运行时给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 ...
随机推荐
- ECU 自动化生产测试系统
概述 ECU(Electronic Control Unit) 是现代车辆中最重要的部件之一,其稳定性.可靠性对车辆安全性的影响至关重要.如何保证ECU 生产质量和效率.如何在生产过程中对ECU 进行 ...
- appium webdriver 基本操作及小例子等
#encoding=utf-8 ''' ''' #driver新建 driver=webdriver.Remote('http://localhost:4723/wd/hub',caps) #关闭dr ...
- Java枚举的小例子
有一次工作中,要根据多个参数确定一个值(车辆事件),确定一个值需要的参数大部分的属性名称是相同的,少部分是独有的,但是参数的值几乎都是不同的: 因为参数太多,if-else写起来就太不优雅了,可以参考 ...
- 在idea中如何将一个项目打成war包
s会用clean+package两个组合命令.来进行打包,我的war直接打在了target下面.然后,随时可以找到.war文件
- 配置ubuntu18.04
关于Ubuntu18.04的配置: 首先在装好系统后需要配置VMware Tools,这个会在虚拟机退出全屏的时候给一个帮助链接,在帮助链接中有详细的教程. 教程链接:https://docs.vmw ...
- clean()方法的简单应用
clean()方法主要用于验证相互依赖的字段,例如注册时,填写的“密码”和“确认密码”要相等时才符合要求. 在调用表单clean() 方法的时候,所有字段的验证方法已经执行完(表单字段的默认验证(如C ...
- 通用分页jsp页面显示
注:本章内容都是在上一篇文章 通用分页后台显示:https://www.cnblogs.com/ly-0919/p/11058942.html 的基础上进行改进,所以有许多的类都在上一篇, 带来不便 ...
- REST与RPC区别
OSI网络七层模型 第一层:应用层.定义了用于在网络中进行通信和传输数据的接口: 第二层:表示层.定义不同的系统中数据的传输格式,编码和解码规范等: 第三层:会话层.管理用户的会话,控制用户间逻辑连接 ...
- spring security控制session
spring security控制session本文给你描述在spring security中如何控制http session.包括session超时.启用并发session以及其他高级安全配置. 创 ...
- PostgreSQL 配置参数
一.配置参数所在文件.类型与查看方式 1.配置参数所在文件 postgresql.conf 2.配置参数类型 1)internal只读参数 这些参数不配置在postgresql.conf中,他们由po ...