java将一个对象赋值给另一个对象_java一个对象赋值给另一个对象,支持平铺类和层级类间的互转...

场景:将一个层级类对象(领域驱动model对象)转换为平铺类对象(view)

src对象,(红框为子对象)

fe311ab70e418fc7478dc7f2d2c3617e.png

target对象(平铺对象)

1e33964360108da49eea4a8e3ac8628c.png

代码思路,先递归反射遍历出所有字段,存到一个map里,再递归赋值给target对象

缺陷:不同子对象间的同名字段会被覆盖成一个值

代码

private static void getSrcALLFieldMap(Object obj,Map collectMap){

Class srcClazz = obj.getClass();

Field[] srcFields = srcClazz.getDeclaredFields();

Stream.of(srcFields).forEach(field -> {

field.setAccessible(true);

try {

if(field.getType().toString().contains("aacoin.account") && !field.getType().isEnum()){

Object subObj = field.get(obj);

if(subObj!=null)

getSrcALLFieldMap(subObj,collectMap);

}else{

collectMap.put(field.getName(),field.get(obj));

}

} catch (IllegalAccessException e) {

e.printStackTrace();

}

});

}

private static void setTargetAllField(Object obj, Map srcMap){

Class srcClazz = obj.getClass();

Field[] srcFields = srcClazz.getDeclaredFields();

Stream.of(srcFields).forEach(field -> {

field.setAccessible(true);

try {

if(field.getType().toString().contains("aacoin.trade.otc") && !field.getType().isEnum()){

Object subObj = field.get(obj);

if(subObj == null) {

Constructor cons = field.getType().getDeclaredConstructor(null);

cons.setAccessible(true);

subObj = cons.newInstance(null);

field.set(obj, subObj);

}

setTargetAllField(subObj, srcMap);

}else{

//collectMap.put(field,obj);

Object currentField = srcMap.get(field.getName());

if( currentField !=null && field.getType() == currentField.getClass()){

field.set(obj,currentField);

}

}

} catch (IllegalAccessException e) {

e.printStackTrace();

} catch (InstantiationException e) {

e.printStackTrace();

} catch (NoSuchMethodException e) {

e.printStackTrace();

} catch (InvocationTargetException e) {

e.printStackTrace();

}

});

}

public static T convert(Object src,Class tClass){

Constructor cons = null;

try {

cons = tClass.getDeclaredConstructor(null);

} catch (NoSuchMethodException e) {

e.printStackTrace();

}

cons.setAccessible(true);

T result = null;

try {

result = cons.newInstance(null);

} catch (InstantiationException e) {

e.printStackTrace();

} catch (IllegalAccessException e) {

e.printStackTrace();

} catch (InvocationTargetException e) {

e.printStackTrace();

}

convert(src,result);

return result;

}

public static T convert(Object src,T result) {

Map srcMap = new HashMap();

getSrcALLFieldMap(src,srcMap);

setTargetAllField(result,srcMap);

return result;

}

调用:

adverVO =convert(advert,AdvertVO.class);

写的比较随意,直接吞掉了异常,需自行处理,将异常统一规范抛出

希望与广大网友互动??

点此进行留言吧!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/487920.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

新基建的内涵、意义和隐忧 ,基于互联网大脑模型的分析

2020年4月20日上午,国家发改委召开4月份例行新闻发布会,首次就“新基建”概念和内涵作出正式的解释。“新型基础设施是以新发展理念为引领,以技术创新为驱动,以信息网络为基础,面向高质量发展需要,提供数字…

罗兰贝格84页白皮书:一文看懂中国ICT产业新黄金十年

来源:智东西中国信息和通信技术产业(下称“ICT产业”)蓬勃发展的黄金三十年,展现出了强大的市场吸引力与发展潜能。从上个世纪九十年代至今,ICT产业收入规模增长了340倍,保持双位数增长,领先全球…

2020年五大虚拟现实和增强现实趋势

来源:AR工业应用2019年是VR/AR增长的一年,用户戴上VR头显就可以沉浸在计算机生成的环境中,VR在设计、营销、教育、培训和零售领域都有大量的需求。AR则通过屏幕或头显将计算机图像叠加到用户的真实世界视图上,预计2020年全球在XR技…

【实战练习】通过docker部署jenkins

jenkins官网 :https://jenkins.io/拉取jenkins Official Jenkins Docker image[rootip-172-31-16-58 ec2-user]# docker pull jenkins/jenkinsUsing default tag: latestlatest: Pulling from jenkins/jenkins06b22ddb1913: Pull complete336c28b408ed: Pull comp…

linux hive mysql_Linux下的Hive与Mysql安装

一,安装MySQLsudo apt-get install mysql-server mysql-client1). 建立数据库hive,create database hive;2). 创建用户hivecreate user ‘hive’’%’ identified by ‘hive’;3).创建hive用户,并授权grant all on hive.* to hive’%’ identified by ‘…

当AI实现多任务学习,它究竟能做什么?

来源:脑极体提到AI领域的多任务学习,很多人可能一下子就想到通用人工智能那里了。通俗意义上的理解,就像《超能陆战队》里的大白这样一种护理机器人,既能进行医疗诊断,又能读懂人的情绪,还能像陪伴机器人一…

mysql sql先后执行_MySQL中SQL语句执行顺序

(7) SELECT(8) DISTINCT (1) FROM (3) JOIN(2) ON (4) WHERE (5) GROUP BY (6) HAVING (9) ORDER BY (10) LIMIT 前期准备工作1、新建一个测试数据库create database testData;2、创建测试表,并插入数据如下:用户表订单表准备SQL逻辑查询测试语句SELECT a.user_id,C…

《自然》:欧洲根据已知基因序列合成新冠病毒,助力疫苗开发

来源:澎湃新闻当地时间5月4日,国际顶级学术期刊《自然》(Nature)以“加快评审文章”(Accelerated Article Preview)形式在线发表了来自瑞士、德国、俄罗斯多家科研机构的一项研究“Rapid reconstruction of SARS-CoV-2 using a sy…

谷歌论文:使用深度强化学习的芯片布局

来源:半导体行业观察摘 要在本项目中,我们提出了一种基于学习的芯片布局方法,这是芯片设计过程中最复杂,最耗时的阶段之一。与以前的方法不同,我们的方法具有从过去的经验中学习并随着时间的推移而不断改进的能力。特别…

吴建平院士:互联网视频技术在疫情防控中的重要作用

来源:互联网天地杂志疫情期间,要关注新一代信息技术助力疫情防控这个主题。最近新的技术非常多,但有一项技术可能被遗忘了,它属于新一代信息技术系列,在防控疾病或生活中发挥着很重要的作用,那就是互联网视…

java比较炫的小程序_推荐三款私藏多年的微信小程序

【小程序】(文后有福利)酷友们,大家好!今天一次性给大家介绍三款实用的微信小程序吧。这三款微信小程序基本上可以卸掉对应的 APP 了。同等功能下的 APP 和 微信小程序,当然会选择后者嘛,不仅消耗内存小,而且方便。1. …

2019年全球数字化转型现状研究报告

来源:Prophet数字化是整个企业范围内的优先战略事项我们的年度《数字化转型现状》研究迎来第五个年头,继续记录企业的不断发展。随着颠覆性技术及其对各大企业和市场的影响力不断加大,我们的研究旨在捕捉促成现代数字化转型的变化和趋势。201…

magent + memcached部署过程

magent memcached架构图 安装步骤如下: ------------------10.1.64.196 10.1.64.197 10.1.65.104 10.1.65.107 memcached (存储节点)---------------------------------------- yum install gcc mkdir /usr/local/src/memcached cd /usr/local/src/memcached ta…

BBC神作:半导体如何改变世界

来源:电子工程师笔记在纪录片领域BBC一直是打遍天下无敌手的存在作为纪录片王牌制作方近期,BBC与FedEx联合推出了神作Made on Earth系列《The humble mineral that transformed the world》作为零差评的重要一集用叹为观止的精良画面为观众讲述了半导体常…

jmeter练习(5)关联升级版—ForEach控制器(提取多个响应结果并依次传参)

前言:大多数情况下,我们会从上一个请求的响应结果中提取某一个值,作为第二个请求的参数进行传参,但是有时候为了提高测试效率,尽可能制造少的测试数据,我们需要从上一个请求的响应结果中获取某一组相同类型…

“天才少年”曹原再次连发2篇Nature!在魔角石墨烯取得系列新进展

来源:青塔、中国科学技术大学新创校友基金会、纳米人5月7日,被誉为“天才少年”的95后博士曹原分别以第一作者兼共同通讯作者、以及共同第一作者的身份,在《Nature》上连发2篇论文。第一篇Nature论文中,研究人员致力于通过对扭转角…

linux交叉编译aix_mips-linux-gcc交叉编译工具链搭建小结【转】

这几天开始做毕业设计了,MPEG2解码的MIPS实现,代码啥的网上一大堆,最大的困难也许不是理解代码,而是搭建环境,也就是搭建mips-linux-gcc交叉编译的环境。网上铺天盖地的都是arm-linux-gcc工具链的教程,唯独…

单链表的头插法和尾插法c语言实现

/*单链表的头插法和尾插法c语言实现*/ #include <stdio.h>#include <stdlib.h>#include <string.h>#define SIZE 100/*简单的定义一个链表节点的数据单元*/typedef struct student_t{ int num; char name[SIZE]; struct student_t* pNext;}studentList, *pSt…

ICLR认知科学@AI workshop一览

来源&#xff1a; 混沌巡洋舰今年ICLR2020顶会有一个特别有意思的专题&#xff0c; 叫认知科学与AI顶会专题。在当下深度学习愈发进入瓶颈期的时代&#xff0c;认知科学和AI的交叉成为大势所趋。一方面我们希望把认知科学或心理学的知识用起来直接指导AI&#xff0c;另一方面我…

谷歌AI公布新项目:未来你的宠物可能真的会是“机器”狗!

From: Tech Crunch; 作者&#xff1a;Iris????或许你曾留心过狗是怎么行走的——它们走起路来肌腱运动流畅&#xff0c;步履灵活&#xff0c;并不必去思考下一步要怎么走&#xff0c;走路这个动作是自然而然发生的事情。而同样的动作&#xff0c;机器狗能够处理得这样自然吗…