用反射写的取属性值和设置属性值得方法
1 package com.lovo.util; 2 3 import java.lang.reflect.Constructor; 4 import java.lang.reflect.Field; 5 6 public class MyUtil { 7 private MyUtil(){ 8 throw new AssertionError(); 9 } 10 /** 11 * 通过反射获取对象的字段值 12 * @param target 目标对象 13 * @param fieldName 字段名称 14 * @return 字段的值或null 15 */ 16 public static Object getValue(Object target,String fieldName) { 17 Object value = null; 18 //用"."分割例如:"car.engine"表示target对象的(Car类型)car属性的(Engine)engine属性值 19 String[] strs = fieldName.split("\\."); 20 for (int i = 0; i < strs.length; i++) { 21 if (target != null) { 22 try { 23 Class<?> clazz = target.getClass();//得到target对象类的类类型对象(描述target对象类的类对象) 24 Field f = clazz.getDeclaredField(strs[i]);//得到属性 25 f.setAccessible(true); 26 if (i == strs.length - 1) { 27 value = f.get(target);//得到属性值29 } else { 30 target = f.get(target);//修改target 31 } 32 } catch (Exception e) { 33 throw new RuntimeException(e); 34 } 35 } 36 } 37 return value; 38 } 39 /** 40 * 设置属性值 41 * @param target 目标对象 42 * @param fieldName 属性 43 * @param value 值 44 */ 45 public static void setValue(Object target,String fieldName,Object value) { 46 Class<?> clazz = target.getClass(); 47 String[] trs = fieldName.split("\\."); 48 for (int i = 0; i < trs.length - 1; i++) { 49 try { 50 Field f = clazz.getDeclaredField(trs[i]); 51 f.setAccessible(true); 52 // Object tempTarget = target; 53 // target = f.get(target); 54 if (f.get(target) == null) { 55 String type = f.getGenericType().toString();//得到值为null的属性的类型的字符串 56 String[] typeSplits = type.split(" "); 57 clazz = Class.forName(typeSplits[1]);//得到值为null的属性的类型的类类型对象 58 Constructor<?> con = clazz.getDeclaredConstructor();//得到属性的无参构造器 59 con.setAccessible(true); //有可能是private的所以设置可以访问 60 f.set(target, con.newInstance());//给null属性赋值 61 } 62 target = f.get(target); 63 clazz = target.getClass(); 64 65 } catch (Exception e) { 66 e.printStackTrace(); 67 throw new RuntimeException(); 68 } 69 } 70 try { 71 Field f = clazz.getDeclaredField(trs[trs.length - 1]); 72 f.setAccessible(true); 73 f.set(target, value); 74 75 } catch (Exception e) { 76 throw new RuntimeException(); 77 } 78 } 79 }
转载于:https://www.cnblogs.com/f644135318/p/4148559.html
用反射写的取属性值和设置属性值得方法相关推荐
- DOM—操作元素(获取属性值、设置属性值、 移除属性)
1. 自定义属性的操作 1.1 获取属性值 element . 属性 获取属性值:(元素本身自带的属性) element . getAttribute( ' 属性 ' ):(主要获取自定义的属 ...
- java 获取属性值和设置属性值
/*** 获取属性值* @param obj* @param property* @return*/public static Object getObjProVal(Object obj, Stri ...
- JavaScript原生态获取DOM对象,获取属性值以及设置属性值
一.获取DOM对象(标签,元素,节点)的三种方法 1.document.getElementById(); 根据元素的id获取当前的标签 例如 <p id="demo"& ...
- JAVA 通过属性名称 获取属性值、设置属性值
import java.lang.reflect.Field; import java.lang.reflect.Method;/*** 获取对象指定属性的值* @param o 对象* @param ...
- java报错误设置属性值_java – 设置属性值时出错;嵌套异常是org.springframework.beans.NotWritablePropertyException:...
我试图使用Spring实用程序ResultSetExtractor从MySQL数据库获取数据,但我得到以下异常: Exception in thread "main" org.sp ...
- php中align标签属性值,html align属性是什么含义?html中的align属性设置方法介绍
html align属性是什么含义?html中的align属性设置方法介绍都在这里,本篇文章介绍了html align属性的定义和含义,还有关于html align属性值的设置介绍 html alig ...
- html clear属性值,clear属性有哪些属性值 CSS clear属性的理解.
CSS clear是什么属性... 语法: clear : none | left |right | both 参数: none : 允许两边都可以有浮动对象 both : 不允许有浮动对象 left ...
- C#反射设置属性值和获取属性值
/// /// 获取类中的属性值/// /// /// /// public string GetModelValue(string FieldName, object obj){try{Type T ...
- css属性和属性值,溢出属性,css盒子
1.css属性和属性值 1.css文本属性 1. font-size 字体大小 单位是px,浏览器默认的是16px,设计图常用的是12px 2. font-family 字体 当字体是中文字体,英文字 ...
最新文章
- 百度地图与所托瑞安达成深度合作 共同推进商用车安全智能驾驶领域创新
- python与正则表达式(part8)--compile对象及match对象的属性方法
- mysql优化器分析器_MySQL查询优化器的概念和原理整个执行过程
- vbs打开软件光标停在第一个输入框_三维设计软件,3DMAX最全快捷键大全,赶快收藏哦...
- linux网络编程之用一张图片说明函数inet_ntop、inet_pton、inet_addr、inet_ntoa 、inet_aton函数之间的关系
- 一对一 一对多 多对多
- mybatis配置文件祥解(mybatis.xml)
- 从Jetty、Tomcat和Mina中提炼NIO构架网络服务器的经典模式
- 消息队列技术—获取JMS中文版和英文版API
- java接口测试工具_接口模拟测试利器,moco server工具的介绍
- 电商数据应用体系建设总结(二)—— 数据应用层架构介绍和规范总结
- 移远BC35-GBC28BC95调试 步骤:从上电到发送一个http请求收到响应
- 8.1.CentOS7安装Spark安装部署及standalone模式介绍
- qr码生成_在PHP中生成QR码
- 雷顿学院大数据一期课程免费下载
- python应用题应用背景及实际意义_课题研究的现实背景及意义
- Chapter 1 (Linear Equations in Linear Algebra): System of linear equations (线性方程组)
- 22条经典心灵鸡汤集锦
- Office.Interop.Excel引用失败
- Ubuntu 12.04 更改 lightdm 登陆界面背景图