在两个实体类里,有相同的属性,有不同的属性,相同名称的属性类型还可能不同,如何实现相同属性的拷贝/复制呢?

实体类

代码清单1:Neo4jNode.java

package com.graph.domain;

import lombok.Data;

import java.util.HashMap;

import java.util.Map;

/**

* @Author:-https://www.4spaces.org

*/

@Data

public class Neo4jNode {

private String id;

private String label;

private String labelName;

private String typeUri;

private Double x;

private Double y;

private Map properties = new HashMap<>();

}

代码清单2:SigmaNode.java

package com.graph.domain;

import lombok.Data;

import java.util.List;

import java.util.Map;

/**

* @Author:-https://www.4spaces.org

*/

@Data

public class SigmaNode {

private String id;

private String label;

private String labelName;

private String typeUri;

private Double x;

private Double y;

private List> properties;

}

方式1:org.springframework.beans.BeanUtils

package com.graph.domain;

import com.alibaba.fastjson.JSON;

import org.springframework.beans.BeanUtils;

import java.util.ArrayList;

import java.util.HashMap;

import java.util.List;

import java.util.Map;

public class BeanCopyExample {

public static void main(String[] args) {

SigmaNode sigmaNode = new SigmaNode();

sigmaNode.setId("1");

sigmaNode.setLabel("https://www.4spaces.org");

sigmaNode.setLabelName("");

Map propertieMap = new HashMap<>();

propertieMap.put("title", "博客");

propertieMap.put("subject", "技术");

List> properties = new ArrayList<>();

properties.add(propertieMap);

sigmaNode.setProperties(properties);

Neo4jNode neo4jNode = new Neo4jNode();

BeanUtils.copyProperties(sigmaNode, neo4jNode);

System.out.println(JSON.toJSONString(neo4jNode));

}

}

方式2:org.apache.commons.beanutils.BeanUtils

package com.graph.domain;

import com.alibaba.fastjson.JSON;

import org.apache.commons.beanutils.BeanUtils;

import java.lang.reflect.InvocationTargetException;

import java.util.ArrayList;

import java.util.HashMap;

import java.util.List;

import java.util.Map;

public class BeanCopyExample {

public static void main(String[] args) {

SigmaNode sigmaNode = new SigmaNode();

sigmaNode.setId("1");

sigmaNode.setLabel("https://www.4spaces.org");

sigmaNode.setLabelName("");

Map propertieMap = new HashMap<>();

propertieMap.put("title", "博客");

propertieMap.put("subject", "技术");

List> properties = new ArrayList<>();

properties.add(propertieMap);

sigmaNode.setProperties(properties);

Neo4jNode neo4jNode = new Neo4jNode();

try {

BeanUtils.copyProperties(sigmaNode, neo4jNode);

} catch (IllegalAccessException e) {

e.printStackTrace();

} catch (InvocationTargetException e) {

e.printStackTrace();

}

System.out.println(JSON.toJSONString(neo4jNode));

}

}

总结

由于两个实体类properties属性类型不一样,org.apache.commons.beanutils.BeanUtils会抛出:java.lang.IllegalArgumentException异常,而org.springframework.beans.BeanUtils则不会对该属性赋值,不会抛出异常。

参考文章:

java 复制实体类_Java实现两个实体类相同属性的复制/拷贝相关推荐

  1. java定义三角类_Java先创建一个point类然后定义trianglete类,在trianglete类中定义三个point的实体表示三角形的三个点。...

    Java先创建一个point类然后定义trianglete类,在trianglete类中定义三个point的实体表示三角形的三个点. 关注:197  答案:1  mip版 解决时间 2021-01-3 ...

  2. java封装对象实体类_Java 接口自动化系列--实体类之entity封装

    实体包entity下面有4个类,主要存放java对象,每个类必须有私有属性,空参构造,get set方法 具体excel中数据信息见---工具类excel文章 1.API类 解析excel中接口信息的 ...

  3. java虚拟机预先加载哪些类_Java虚拟机JVM学习02 类的加载概述

    Java虚拟机JVM学习02 类的加载概述 类的加载 类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建一个java.lang.Class对 ...

  4. java中怪物移动_java中两大怪物,附带面试题!

    最近老是有小伙伴问类和Object相关的问题,感觉还是很多人对此不是很明白,那我们今天就干掉这两个怪物. 类介绍 Java 程序是由若干个类组成的,类也是面向对象编程思想的具体实现. 以下为类的定义: ...

  5. java对象生命周期_Java对象生命周期和类生命周期

    原标题:Java对象生命周期和类生命周期 作者:彭空空 链接:https://www.jianshu.com/p/25ea857ba78b 导读 对象的生命周期 类的加载机制 类的生命周期 类加载器 ...

  6. java操作文件爱女_Java的IO操作---File类

    目标 1)掌握File类作用 2)可以使用file类中方法对文件进行读写操作. File类 唯一与文件有关的类.使用file类可进行创建或删除操作,要想使用File类,首先观察File类的构造方法. ...

  7. java构造一个水果类_Java基础入门之Object类、匿名内部类、构造方法的继承解析...

    前言 大家好,我是Java进阶者.这篇文章我们主要介绍Java基础中的Object类.匿名内部类.构造方法的继承知识,一起来学习下吧! 一.Object类 1.Object类是所有类的父类,所有类都继 ...

  8. java正则表达式类_java中正则表达式之Pattern类与Matcher类

    java中正则表达式之Pattern类与Matcher类 ======================================================================= ...

  9. java远程代码注入_Java RMI远程反序列化任意类及远程代码执行解析(CVE-2017-3241 )...

    原标题:Java RMI远程反序列化任意类及远程代码执行解析(CVE-2017-3241 ) 本打算慢慢写出来的,但前几天发现国外有研究员发了一篇关于这个CVE的文章,他和我找到的地方很相似.然而不知 ...

最新文章

  1. c/c++内存机制(一)(原)
  2. VC++动态链接库(DLL)编程(一)――理解库
  3. 338. Counting Bits
  4. 个人觉得非常好的B树,B+树的总结
  5. 【Groovy】map 集合 ( map 集合定义 | 通过 getClass 函数获取 map 集合的类型 | 代码示例 )
  6. scp时候出现ssh Connection refused的解决方案
  7. python 多进程共享变量manager_python 进程间共享数据 multiprocessing 通信问题 — Manager...
  8. P3195 [HNOI2008]玩具装箱TOY(斜率优化)
  9. E: 无法获得锁 /var/lib/dpkg/lock-frontend - open (11: 资源暂时不可用) E: 无法获取 dpkg 前端锁 (/var/lib/dpkg/lock-front
  10. 北语18春《计算机网络技术》作业4,北语18春《计算机网络技术》作业4
  11. 华为郭平:很愿意使用高通芯片制造手机
  12. 中判断字符串是否为空_自己动手编写VBA代码,判断一个工作表是否为空,然后删除它...
  13. 创建模式--辛格尔顿
  14. mysql是slot_技术分享 | MySQL 主机该如何配置 fs.aio-max-nr
  15. 步进电机驱动器单片机控制电路
  16. Verilog语法练习
  17. chrome 插件开发指南
  18. GO中时间转换到毫秒
  19. Hadoop简介 4V特征和3个核心
  20. 英语文本处理工具库——spaCy

热门文章

  1. MySQL - 常用语句学习
  2. js中session的使用
  3. 检索 COM 类工厂中 CLSID 为 {{10020200-E260-11CF-AE68-00AA004A34D5}} 的组件时失败解决办法...
  4. 管理理念:灵活应对客户的不满,把他们转换成永远忠诚的客户
  5. 免费利用python把pdf格式转docx
  6. Jenkins 日程表配置
  7. 站长杂谈:这样的内容制作者真的很可爱
  8. 怎么把线稿提取出来_「推荐」线稿应该如何提取?教你最简单的提取线稿技巧...
  9. 金立手机创始人:山寨手机商两年后或只剩20家
  10. c语言作业冰雹猜想,C语言编程实现冰雹猜想的算法,并测算各个自然数到达4-2-1谷底(即N等于4,2,1结束后)所经过的变换次数。...