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. sqllite中实现字符串分割

    WITH split(word, str) AS (    -- alternatively put your query here    -- SELECT '', category||',' FR ...

  2. robotframework-ride支持python3

    最近发现robotframework的RIDE工具终于支持python3了,赶紧就安装了一下. 最新版本1.7.3.1基于wxPython4.0.4,此时的wxPython也是支持Python3.x的 ...

  3. IDLE清屏扩展

    新建ClearWindows.py,复制以下代码: class ClearWindow: menudefs = [ ('options', [None, ('Clear Shell Window', ...

  4. 理解去中心化 稳定币 DAI

    本文转载于深入浅出区块链, 原文链接 随着摩根大通推出JPM Coin 稳定币,可以预见稳定币将成为区块链落地的一大助推器. 坦白来讲,对于一个程序员的我来讲(不懂一点专业经济和金融),理解DAI的机 ...

  5. Javabean介绍

    1.javabean简介 JavaBean 是一种JAVA语言写成的可重用组件.为写成JavaBean,类必须是具体的和公共的,并且具有无参数的构造器.JavaBean 通过提供符合一致性设计模式的公 ...

  6. 一个简单的C语言程序(详解)

    C Primer Plus之一个简单的C语言程序(详解) #include <stdio.h> int main(void) //一个简单的 C程序 { int num; //定义一个名为 ...

  7. VS 2017 创建类注释模板

    在VS 2017/2019等 同样打开下方路径 C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\I ...

  8. 微信小程序分享及信息追踪

    我就是个搬用工—来源:https://www.jianshu.com/p/87a75ec2fd53 小程序分享群及信息追踪 需求 页面分享 ​ 小程序页面分享链接增加source参数,值为用户ID加密 ...

  9. Linux桌面系统常用软件和笔记(更新)

    (一).下文涉及到的环境 manjaro.deepin.Arch等 有些可以通用 有些不可以通用 (二).常用软件下载 一.桌面美化软件 1.桌面壁纸下载软件: varirety 下载方式:可以在多个 ...

  10. ORA-28000 帐户已被锁定问题处理

    1.问题描述 应用监控程序报警ORA-28000,PL/SQL无法登陆数据库 2.问题分析 oracle11g中默认在default概要文件中设置了 “FAILED_LOGIN_ATTEMPTS=10 ...