博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
用反射的形式将一个对象属性值赋值给另一个对象,省略点get/set方法的冗余代码...
阅读量:6938 次
发布时间:2019-06-27

本文共 2474 字,大约阅读时间需要 8 分钟。

1.本例使用的是idea

首先需要在idea中安装lombok插件,省略getter和setter方法的书写

在maven项目中加入lombok依赖

org.projectlombok
lombok
1.16.10

2.建立两个实体类:

import lombok.Data;/** * @author yangchao * @version V1.0 * @Description: 第一个测试实体类:作为资源实体类 * @date 2018/10/9 */@Datapublic 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 */@Datapublic 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
srcMap = new HashMap
(); 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=20cost=null

  

转载于:https://www.cnblogs.com/fly-boy/p/9759278.html

你可能感兴趣的文章
如何在MyBatis-3.2.7中使用Log4j2 rc2——MyBatis学习笔记之十九
查看>>
linux 文件系统管理
查看>>
学习笔记CB002:词干提取、词性标注、中文切词、文档分类
查看>>
httpd三之源码编译http2.4.9、虚拟主机、基于用户认证
查看>>
疯狂ios讲义之实现游戏逻辑(1)
查看>>
LDAP安装步骤
查看>>
如何实现跨 Docker 主机存储?- 每天5分钟玩转 Docker 容器技术(73)
查看>>
syslog配置文件总结
查看>>
linux网关配置DNS重定向
查看>>
动态修改LVS real server配置的影响验证
查看>>
限制域用户各自登录自己的计算机
查看>>
DELETE与TRUNCATE的区别
查看>>
Linux之cat、cut、sort、uniq、wc、tr常用选项总结
查看>>
Struts2 下载取消报异常最终解决办法 1.1版本
查看>>
活动目录系列之八:信任(下)
查看>>
【shell编程】shell if 参数详解
查看>>
如何找到存在Ceph里面的文件
查看>>
wikioi 1098 均分纸牌
查看>>
System Center Technical Preview DPM(2016)对Exchange2016的灾难恢复
查看>>
javascript 继承
查看>>