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. Qt Designer问题(挖坑)

    同时用两个VS的Qt Designer打开.ui文件,关闭Qt Designer之后再打开发现Qt Designer不在打开方式了.要重启VS才行.

  2. mongodb常用的sql语句总结

    本文为博主原创,转载请注明出处: 1 .  查询所有 db.getCollection('CollectionName').find() 2.根据条件查询 db.getCollection('Coll ...

  3. 【HNOI 2017】影魔

    Problem Description 影魔,奈文摩尔,据说有着一个诗人的灵魂.事实上,他吞噬的诗人灵魂早已成千上万.千百年来,他收集了各式各样的灵魂,包括诗人.牧师.帝王.乞丐.奴隶.罪人,当然,还 ...

  4. C语言-第6次作业

    1.本章学习总结 1.1思维导图 1.2 本章学习体会 学习感受:先是接触到网络工程导论的建立文件的方式,觉得很方便很好用,而后直接从代码的层面建立文件,觉得很新奇,更加方便,随着大作业的一步一步升级 ...

  5. @keyframs实现图片gif效果

    页面中使用动效图 一般让设计出一个gif格式的图,但是git图效果都很差,有一个替代gif图做动效的方法:使用@keyframes 具体思路: 1.设计两个互斥的图片(相当于把gif图分割成一帧一帧的 ...

  6. Spark2.X管理与开发

      ==========第一篇:Scala编程语言========= 一.Scala语言基础 1.Scala语言简介 Scala是一种多范式的编程语言,其设计的初衷是要集成面向对象编程和函数式编程的各 ...

  7. [python]html格式转md格式

    html格式转md格式 # 模块html2text pip install html2text/pip3 install html2text 测试: import html2text as ht te ...

  8. 4 - BFS & Topological Algorithm

    615. Course Schedule https://www.lintcode.com/problem/course-schedule/description?_from=ladder&& ...

  9. hyperledger fabric相关记录

    打开对接监控软件(statsd或者prometheus)开关 每个peer上 CORE_OPERATIONS_LISTENADDRESS=peer0.orgxxxxxxxxx:9443 CORE_ME ...

  10. Python自学:第三章 使用方法pop()删除元素

    motorcycle = ["honda", "yamaha", "suzuki"] last_owned = motorcycle.pop ...