首页 > 编程语言 >java两个不同类的对象相同属性赋值

java两个不同类的对象相同属性赋值

时间:2023-03-31 13:44:24浏览次数:28  
标签:java target 对象 source String Java 赋值 属性

一、外部工具包

  Java中有很多工具包可以用来实现对象属性复制,其中比较常用的有以下几个:

  1. Apache Commons BeanUtils:提供了一组简单易用的API,可以实现对象属性的复制、获取、设置等操作。

  2. Spring Framework BeanUtils:与Apache Commons BeanUtils类似,提供了一组API,可以实现对象属性的复制、获取、设置等操作。

  3. Dozer:一个开源的Java对象映射工具,可以实现不同类型对象之间的属性映射。

  4. MapStruct:一个基于注解的Java对象映射工具,可以自动生成类型安全的映射代码。

  这些工具包都有详细的文档和示例,可以根据具体需求选择合适的工具包来实现对象属性复制。

二、Java反射机制来实现这个功能

  具体步骤如下:

  1. 获取源对象和目标对象的Class对象。

  2. 获取源对象的所有属性,遍历每个属性。

  3. 判断目标对象是否存在与源对象相同名称的属性,如果存在则将源对象的属性值赋值给目标对象的属性。

  4. 复制完成后返回目标对象。

  示例代码如下:

 1 public static <T, S> T copyProperties(S source, T target) throws Exception {
 2     Class<?> sourceClass = source.getClass();
 3     Class<?> targetClass = target.getClass();
 4 
 5     Field[] sourceFields = sourceClass.getDeclaredFields();
 6     for (Field sourceField : sourceFields) {
 7         String fieldName = sourceField.getName();
 8         Field targetField = null;
 9         try {
10             targetField = targetClass.getDeclaredField(fieldName);
11         } catch (NoSuchFieldException e) {
12             // 目标对象不存在该属性,忽略
13             continue;
14         }
15 
16         sourceField.setAccessible(true);
17         targetField.setAccessible(true);
18 
19         Object value = sourceField.get(source);
20         targetField.set(target, value);
21     }
22 
23     return target;
24 }

使用示例:

 1 class Source {
 2     private String name;
 3     private int age;
 4     // getter and setter
 5 }
 6 
 7 class Target {
 8     private String name;
 9     private String address;
10     // getter and setter
11 }
12 
13 Source source = new Source();
14 source.setName("Tom");
15 source.setAge(20);
16 
17 Target target = new Target();
18 target.setAddress("Beijing");
19 
20 copyProperties(source, target);
21 
22 System.out.println(target.getName()); // 输出 "Tom"
23 System.out.println(target.getAddress()); // 输出 "Beijing"

 

标签:java,target,对象,source,String,Java,赋值,属性
From: https://www.cnblogs.com/woju/p/17276027.html

相关文章

  • Float 或者 Double 除以零不会抛出 java.lang.ArithmeticExceptionL:/by zero 异常
    1.Java的浮点运算是基于IEEE-754标准来的。IEEE-754standardJava'sFloating-PointOperations2.Java语言规范https://docs.oracle.com/javase/specs/jls/se7/html/jls-4.html#jls-4.2.31.0/0=+Infinity-1.0/0=-Infinity0/0=NaN......
  • Java 根据地址查询经纬度
    百度开放平台控制台:https://lbsyun.baidu.com/apiconsole/key#/home经纬度比较网址:https://jingweidu.bmcx.com/1、创建应用 2、写Java服务 /***通过字符串地址获取经纬度*@Author:menghaipeng*@Date:2023/3/3111:31*/publicclassDistanceUtil{......
  • HTML编辑器粘贴图片自动上传到服务器(Java版)
    ​ 由于工作需要必须将word文档内容粘贴到编辑器中使用但发现word中的图片粘贴后变成了file:///xxxx.jpg这种内容,如果上传到服务器后其他人也访问不了,网上找了很多编辑器发现没有一个能直接解决这个问题考虑到自己除了工作其他时间基本上不使用windows,因此打算使用nodejs来解......
  • Java:如何在PowerPoint幻灯片中创建散点图
    散点图是通过两组数据构成多个坐标点,考察坐标点的分布,判断两变量之间是否存在某种关联或总结坐标点的分布模式。散点图将序列显示为一组点,值由点在图表中的位置表示,类别由图表中的不同标记表示,通常用于比较跨类别的聚合数据。本文将为您介如何通过Java代码在PowerPoint幻灯片中创......
  • CSS总复习(二)一些属性介绍
    CSS字体、文本样式指定字体不能指望用户的机器上一定安装了你想使用的字体。解决这个问题的方法是使用Web字体,我们可以直接下载Web字体并使用在自己的页面上,而不需要用户做什么。使用@font-face指定Web字体,如:@font-face{font-family:'MyFont';font-style:normal;......
  • css的行内元素哪些属性不生效。
    起因是在解决异常的时候提醒  故而思索,行内元素不能使用边距宽高吗搜索后发现:1、不是所有的行内元素都不能使用width、height。比如img2、行内元素可以使用padding3、行内元素的左右外边距是生效的,上下不行......
  • Java(TM) Platform SE binary 打开jar文件报错
    问题描述双击jar包,使用Java(TM)PlatformSEbinary直接运行java代码,报错Error:AJNIerrorhasoccurred,pleasecheckyourinstallationandtryagain和AJavaExceptionhasoccurred.选择更多应用,进目录里选中javaw.exe也不行问题原因jdk版本与jar包的编译时的版本......
  • 小程序 page 和 onLoad 的赋值
    貌似page中的赋值只会执行一次,而不是进入此页面后执行一次,例如:data:{title:'您认为别人是这样的吗?',bubblesTextList:app.globalData.mood_1},onLoad(options){},那么获取到的bubblesTextList永远不会改变,及时你在下面对globalData重新赋值,解......
  • java学习日记20230330-异常
    异常基本概念java语言中,将程序执行中发生的不正常情况称为异常,开发中的语法错误和逻辑错误不是异常;执行中的异常事件可以分为两类error(错误),java虚拟机无法解决的严重问题:如jvm系统内部错误,资源耗尽:StackOverflowError【栈溢出】和OOM(outofmemory)exception:其他因编程错误或......
  • java条件判断和循环
    一流程控制三大流程控制语句:顺序,选择,循环二选择结构在多重if-else中,只有一个语句不加括号时:else匹配最近的,就近原则 if结构,if-else结构if(条件)  语句1;else  语句二  if(条件){  语句1;}else{  语句2;} 多重if......