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方法的冗余代码的更多相关文章

  1. Java反射机制调用对象的方法 —— 将一个对象的属性值赋值给另一个对象的属性

    模拟一个场景: 众所周知,EasyExcel导出Excel文档是依赖于注解完成的,在实体类需要导出的属性上面加上注解,导出的时候会自动识别该属性. 假如我们现在需要导出用户的信息,又不想污染原本的实体 ...

  2. java 通过反射获取和设置对象属性值

    public static Object parseDate(Object object){ SimpleDateFormat sdf = new SimpleDateFormat("yyy ...

  3. java 对象属性复制,将一个对象的属性值赋值给另一个对象, 属性名需要相同

    import org.springframework.beans.BeanUtils; BeanUtils.copyProperties(源对象, 目标对象);

  4. Java反射之Bean修改更新属性值等工具类

    package com.bocean.util; import java.lang.annotation.Annotation; import java.lang.reflect.Field; imp ...

  5. Day14_85_通过反射机制修改Class的属性值(IO+Properties)动态修改

    通过反射机制修改Class的属性值(IO+Properties)动态修改 import java.io.FileInputStream; import java.io.FileNotFoundExce ...

  6. 更新AD对象属性值

    1. 对于Set-ADUser不包含的对象属性,可以采用replace来操作 Set-ADUser -Identity 'UserA' -Replace @{userWorkstations = 'C ...

  7. Struts2 用 s:if test 判断String类型的对象属性值和单字符是否相等的问题

    Struts2 用 s:if test 判断String类型的对象属性值和单字符是否相等的问题   首先,这里所指的单字符形如:Y,男. 有两种做法: a. <s:if test='news.s ...

  8. C# 对象引擎,以路径形式访问对象属性(data.Product[1].Name)

    对象引擎,以路径形式访问对象属性,例data.Product[1].Name. 在做excel模板引擎的时候,为了能方便的调用对象属性,找了一些模板引擎,不是太大就是不太适用于excel, 因为exc ...

  9. C#通过属性名字符串获取、设置对象属性值

    之前理工项目从这个博客找到了相对应的方法:C#通过属性名字符串获取.设置对象属性值 https://www.cnblogs.com/willingtolove/p/12198871.html

随机推荐

  1. docker daemon 配置代理

    创建插件目录 sudo mkdir -p /etc/systemd/system/docker.service.d 编写proxy配置文件 #vim /etc/systemd/system/docke ...

  2. Python3学习笔记----生成器

    生成器的作用 生成器可以在循环的过程中推算出后续的元素,不必创建完整的list,从而节省大量空间. 生成器的创建 1.把一个列表生成式的 [ ] 改写为( ) # -*- coding: UTF-8 ...

  3. C语言--第2次作业

    1.本章学习总结 1.1思维导图 1.2本章学习体会及本章代码量 1.2.1学习体会 不同于前几周简单的条件语句等,这一周开始学习循环结构for,while语句,甚至是多种语句嵌套使用,让我直接感受到 ...

  4. IOS高级开发之多线程(五)NSOperation 2

    接着看NSOperation.NSOperationQueue线程间的通信: 应用场景:比如我们经常把一些耗时的操作比如下载图片放在子线程,那么当这个完成之后,我们就需要回到主线程,这个时候就需要用到 ...

  5. 从svn到git开发转变

    前言:目前的公司的开发技术还是处于刀耕火种的年代,react,vue已经火到不行了,可是还在用jQuery一遍遍处理着dom.版本控制用的是svn,这里也不是说svn不好,在windows下svn的“ ...

  6. 跨域获取后台日期-ASP

    最近所有的计划都被打乱,生活节奏也有些控制不住,所以在自己还算清醒的时候,把之前一个小功能写下来,对其它人也有些帮助. 需求前景:需要用AJAX跨域获取后台服务器日期. 1.分析需求: 在这个需求中, ...

  7. HBase详解

    1.   hbase简介 1.1.  什么是hbase HBASE是一个高可靠性.高性能.面向列.可伸缩的分布式存储系统,利用HBASE技术可在廉价PC Server上搭建起大规模结构化存储集群. H ...

  8. 2019.4.24(js)

    1. 取得正数和负数的绝对值 Math.abs(7.25) Math.abs(-7.25) 2.利用JS刷新页面方法 https://www.cnblogs.com/Chen-XiaoJun/p/62 ...

  9. dvi接口介绍

    Most graphics cards and motherboards feature a Digital Video Interface (DVI) connector for connectin ...

  10. MySQL的随机数函数rand()的使用技巧

    咱们学php的都知道,随机函数rand或mt_rand,可以传入一个参数,产生0到参数之间的随机整数,也可以传入两个参数,产生这两个参数之间的随机整数. 而在mysql里,随机数函数rand不能传参, ...