用反射的形式将一个对象属性值赋值给另一个对象,省略点get/set方法的冗余代码
1.本例使用的是idea
首先需要在idea中安装lombok插件,省略getter和setter方法的书写
在maven项目中加入lombok依赖
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.10</version>
</dependency>
2.建立两个实体类:
import lombok.Data; /**
* @author yangchao
* @version V1.0
* @Description: 第一个测试实体类:作为资源实体类
* @date 2018/10/9
*/
@Data
public class FirstPerson { private String name;
private int age;
}
import lombok.Data; import java.math.BigDecimal; /**
* @author yangchao
* @version V1.0
* @Description: 第一个测试实体类:作为目标实体类
* @date 2018/10/9
*/
@Data
public class SecondPerson { private String name;
private int age; private BigDecimal cost;
}
3.利用反射进行对象之间字段的转换工具:
/**
* @author yangchao
* @return void
* @date 2018/10、9
* @Description: 将srcObj对象字段的值拷贝到destObj字段(前提:两个对象中的字段名相同时)
* 其实就是通过反射将值先存在map中,在遍历set进目标对象
*/
public static void copyFieldToBean(Object srcObj,Object destObj){
Map<String, Object> srcMap = new HashMap<String, Object>();
Field[] srcFields = srcObj.getClass().getDeclaredFields();
for (Field srcField : srcFields) {
try {
srcField.setAccessible(true);
srcMap.put(srcField.getName(), srcField.get(srcObj)); //获取属性值
} catch (Exception e) {
e.printStackTrace();
}
}
Field[] destFields = destObj.getClass().getDeclaredFields();
for (Field destField : destFields) {
destField.setAccessible(true);
if (srcMap.get(destField.getName()) == null) {
continue;
}
try {
destField.set(destObj, srcMap.get(destField.getName())); //给属性赋值
} catch (Exception e) {
e.printStackTrace();
}
}
}
4.测试方法和结果:
public static void main(String[] args) {
FirstPerson firstPerson = new FirstPerson();
SecondPerson secondPerson = new SecondPerson();
firstPerson.setAge(20);
firstPerson.setName("张三");
copyFieldToBean(firstPerson,secondPerson);
Field[] fds = secondPerson.getClass().getDeclaredFields();
for (Field fd : fds) {
try {
fd.setAccessible(true);
System.out.println(fd.getName() + "=" + fd.get(secondPerson));
} catch (Exception e) {
e.printStackTrace();
}
}
}
name=张三
age=20
cost=null
用反射的形式将一个对象属性值赋值给另一个对象,省略点get/set方法的冗余代码的更多相关文章
- Java反射机制调用对象的方法 —— 将一个对象的属性值赋值给另一个对象的属性
模拟一个场景: 众所周知,EasyExcel导出Excel文档是依赖于注解完成的,在实体类需要导出的属性上面加上注解,导出的时候会自动识别该属性. 假如我们现在需要导出用户的信息,又不想污染原本的实体 ...
- java 通过反射获取和设置对象属性值
public static Object parseDate(Object object){ SimpleDateFormat sdf = new SimpleDateFormat("yyy ...
- java 对象属性复制,将一个对象的属性值赋值给另一个对象, 属性名需要相同
import org.springframework.beans.BeanUtils; BeanUtils.copyProperties(源对象, 目标对象);
- Java反射之Bean修改更新属性值等工具类
package com.bocean.util; import java.lang.annotation.Annotation; import java.lang.reflect.Field; imp ...
- Day14_85_通过反射机制修改Class的属性值(IO+Properties)动态修改
通过反射机制修改Class的属性值(IO+Properties)动态修改 import java.io.FileInputStream; import java.io.FileNotFoundExce ...
- 更新AD对象属性值
1. 对于Set-ADUser不包含的对象属性,可以采用replace来操作 Set-ADUser -Identity 'UserA' -Replace @{userWorkstations = 'C ...
- Struts2 用 s:if test 判断String类型的对象属性值和单字符是否相等的问题
Struts2 用 s:if test 判断String类型的对象属性值和单字符是否相等的问题 首先,这里所指的单字符形如:Y,男. 有两种做法: a. <s:if test='news.s ...
- C# 对象引擎,以路径形式访问对象属性(data.Product[1].Name)
对象引擎,以路径形式访问对象属性,例data.Product[1].Name. 在做excel模板引擎的时候,为了能方便的调用对象属性,找了一些模板引擎,不是太大就是不太适用于excel, 因为exc ...
- C#通过属性名字符串获取、设置对象属性值
之前理工项目从这个博客找到了相对应的方法:C#通过属性名字符串获取.设置对象属性值 https://www.cnblogs.com/willingtolove/p/12198871.html
随机推荐
- javascript 之 面向对象【创建对象】
创建对象 (1) 工厂模式 function createPerson(name, age, job){ var o = new Object(); o.name = name; o.age = ag ...
- fusion使用——程序集绑定冲突工具
1.以管理员身份运行vs命令提示符 2.运行 fuslogvw 3.以管理员身份运行Powershell To Enable:(确保fusion日志的文件夹D:\FusionLog\的存在) Set- ...
- Win10下JDK下载与环境变量配置
一.JDK下载 1.JDK下载地址:https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.ht ...
- DLL 破解工具
1.Reflecter+Reflexil (第一类) 2.本文使用的工具下载地址为:(第二类) https://github.com/cnxy/dnSpy/archive/v4.0.0.zip 或 d ...
- time to set up Goals
Function Goal Training for new guys, meanings who takes part of QA jobs and make other QA members g ...
- Project Euler 66: Diophantine equation
题目链接 思路: 连分数求佩尔方程最小特解 参考博客 模板: LL a[]; bool min_pell(LL d, LL &x, LL &y) { LL m = floor(sqrt ...
- 给echart初始化的dom节点绑定时间获取点击的值渲染省市区
this.drawMap().on('click', function (params) { var province = params.name; that.mapStatus = province ...
- Unity --- 设置选择的图片的格式
static void Setting(string assetPath, int maxSize, TextureImporterFormat androidFormat, TextureImpor ...
- 如何为Rails作贡献:例增加rich_text field generators
如何为Rails作贡献 例增加rich_text field generators 下载https://github.com/rails/rails 打开atom,在 rails/railties/l ...
- 运维案例 | Exchange2010数据库损坏的紧急修复思路
关注嘉为科技,获取运维新知 Exchange后端数据库故障,一般都会是比较严重的紧急故障,因为这会直接影响到大面积用户的正常使用,而且涉及到用户数据.一旦遇到这种级别的故障,管理员往往都是在非常紧 ...