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

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

target对象(平铺对象)

代码思路,先递归反射遍历出所有字段,存到一个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);

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

希望与广大网友互动??

点此进行留言吧!

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

  1. Java面对对象的核心是啥_Java面向对象核心技能

    1.封装 封装是面向对象的三大特性之一,就是将类的状态信息隐藏在类内部,不允许外部程序直接访问,而通过该类提供的方法来实现对隐藏信息的操作和访问. 封装的好处:隐藏类的实现细节:让使用者只能通过程序规 ...

  2. .net 把一个对象赋值给一个参数_Java GC回收算法-判定一个对象是否可以回收

    开源推荐 推荐一款一站式性能监控工具(开源项目) Pepper-Metrics是跟一位同事一起开发的开源组件,主要功能是通过比较轻量的方式与常用开源组件(jedis/mybatis/motan/dub ...

  3. java让对象分配在栈上_java – Hotspot何时可以在堆栈上分配对象?

    我做了一些实验,以便了解Hotspot何时可以进行堆栈分配.事实证明,它的堆栈分配比基于available documentation的预期要有限得多.Choi"Escape Analysi ...

  4. java json 对象如何对属性排序_Java对象集合、对象数组如何排序?你需要知道这两种方式...

    一.引子 在比较Java对象时,正常情况下,我们只能使用==或!=进行比较,而不能使用>或者<这样的运算符. 那么问题来了,开发过程中我们经常要对多个对象排序,排序必然需要比较,那么如何实 ...

  5. java未知对象调用其某个方法_java如何调用一个方法内的对象

    我在调试一个小例子,自己改了些东西我在主类里尝试println下面一个方法里的对象的属性,但是提示找不到而且大家都是Public就是这句:System.out.println("m4.cou ...

  6. java 比较对象内容是否相同的_Java 比较对象中的内容是否一致

    获取对象中的所有属性 private static Field[] getAllFields(Object object) { Class clazz = object.getClass(); Lis ...

  7. java 判断对象是否是xml格式_java对象与xml格式之间的转换

    java对象是可以直接与xml相互转换的,但需要导入包:xstream-1.3.1.jar,在创建对象的时候,注意一定要new一个DomDriver: 成功的测试代码如下: package com.x ...

  8. Java将一个对象的属性值copy给另一个相同的对象

    import java.beans.BeanInfo; import java.beans.Introspector; import java.beans.PropertyDescriptor;pub ...

  9. java对象赋值给另一个对象_java面向对象编程

    对象,从字面意思来看就是我们面对的物象.由此便可以知道,万事万物皆为对象.比如:一台电脑,一辆汽车,一部手机等等都是对象. 比如我们想要买一部手机,我们想要内存大一点的,最新款的,CPU 运算快一点的 ...

最新文章

  1. 知乎如何运用OKR管理公司目标,达成绩效?
  2. 博客园的“随笔、文章、新闻、日记有啥区别”
  3. 第十一届全国大学生智能汽车竞赛获奖名单
  4. Python 进阶_生成器 生成器表达式
  5. php foreach方法,forEach方法怎么使用
  6. 深入浅出数据库设计三范式
  7. HDU.1003 Max Sum
  8. python docx 表格打印不显示_python-docx 设置 word 文档中表格格式
  9. html中设置锚点定位的几种常见方法
  10. Jackson 生成xml格式文件
  11. android listview 获取viewholder,Android ViewHolder 的基本使用
  12. android+cardview用法,Android CardView的使用
  13. 51单片机数码管静态显示
  14. 服务器导出excel文档,服务器导出excel功能配置
  15. AutoFill 自动填充生长动画插件
  16. Rancher2.6全新Monitoring快速入门
  17. 用 Python 运行神经网络
  18. 实力踩坑:There is no getter for property named ‘XXX‘ ‘class XXX‘
  19. 第十届蓝桥杯大赛PythonB组
  20. Day4 T2 卡牌游戏

热门文章

  1. 更新wpscan_wpscan扫描工具
  2. java 析构函数_C++与Java的区别(一)
  3. 跨设备链路聚合_路由与交换技术(华为设备)第五讲---链路聚合
  4. 为什么要给计算机配置IP地址,更改ip地址 为何要重启电脑
  5. 李宏毅机器学习(一)基本概念介绍
  6. 人工智能在线特征系统中的数据存取技术
  7. 【搜索/推荐排序】总结
  8. 基于深度卷积神经网络的目标检测研究综述
  9. SQL 与 ORACLE 的比较
  10. mysql5.7 备份