首页 > 编程语言 >java 同一个对象之间赋值后添加入List中,属性值相互覆盖的问题解决方案

java 同一个对象之间赋值后添加入List中,属性值相互覆盖的问题解决方案

时间:2023-08-03 19:12:34浏览次数:35  
标签:java spring List copyProperties 赋值 BeanUtils 属性

1、for循环中NEW对象,因为List中存的是对象的引用地址。

2、BeanUtils是属于spring框架下beans包下的工具类

BeanUtils它提供了对java反射和自省API的包装。它里面还有很多工具类,

这篇文章我们介绍一下copyProperties这个方法

使用情景
一般当我们有两个具有很多相同属性的JavaBean实体类时,一个很常见的情况就是Struts里的PO对象(持久对象)和对应的ActionForm

传统的方式对属性逐个赋值:依次的进行set,get 但是这样的赋值方式,是非常麻烦的,而且重复代码量可以会很多,很冗余

BeanUtils.copyProperties()
而这时我们就可以使用BeanUtils.copyProperties()方法

并且用起来很方便,一行代码就可以搞定,简单明了:

BeanUtils.copyProperties(Object source, Object target);
=> BeanUtils.copyProperties("转换前的类", "转换后的类");
注意
BeanUtils.copyProperties(a, b);

b中的存在的属性,a中一定要有,但是a中可以有多余的属性; (a中是否一定要有b中存在的属性此条存疑,因为实际使用即使不存在也不会报错)
(查看源码后发现此处错误,即使a中没有b中存在的属性也不会报错,仍可以正常复制其他属性)

a中与b中相同的属性都会被替换,不管是否有值;

a、 b中的属性要名字相同,才能被赋值,不然的话需要手动赋值;

Spring的BeanUtils的CopyProperties方法需要对应的属性有getter和setter方法;

如果存在属性完全相同的内部类,但是不是同一个内部类,即分别属于各自的内部类,则spring会认为属性不同,不会copy;

spring和apache的copy属性的方法源和目的参数的位置正好相反,所以导包和调用的时候都要注意一下。

标签:java,spring,List,copyProperties,赋值,BeanUtils,属性
From: https://www.cnblogs.com/sdou/p/17604212.html

相关文章

  • java输出字符和数字
    1、用java如何输出一个字符串中的所有数字?2、使用java语言编写程序,统计从控制台输入的一行字符串中数字个数、字母...3、java中怎么将字符串中的数字取出来4、JAVA怎样快速把字符串里面的数字取出来用java如何输出一个字符串中的所有数字?数字的ascii码是48-57共10个。......
  • 《深入理解Java虚拟机》读书笔记:Java内存区域
    Java内存区域包含程序计数器、虚拟机栈、本地方法栈、Java堆、方法区五个区域。运行时数据区分类 Java内存区域 一、程序计数器程序计数器(ProgramCounterRegister)是一块较小的内存空间,它可以看作是当前线程所执行的字节码的信号指示器。字节码解释器工作时就是通过......
  • 三个实例演示 Java Thread Dump 日志分析
    jstackDump日志文件中的线程状态dump文件里,值得关注的线程状态有:死锁,Deadlock(重点关注) 执行中,Runnable  等待资源,Waitingoncondition(重点关注) Waitingonmonitorentry(重点关注)暂停,Suspended对象等待中,Object.wait()或TIMED_WAITING阻塞,Blocked(重点关注)......
  • java爱心代码,脱单必备
    packagecom.example.test;importjava.awt.Color;importjava.awt.Font;importjava.awt.Graphics;importjava.awt.Image;importjava.awt.Toolkit;importjava.util.jar.JarOutputStream;importjavax.swing.JFrame;classCardioidextendsJFrame{//定义窗口大小privatestat......
  • JavaScript基础04
    函数函数定义function自定义函数名(){ 函数体代码;}//函数名命名:1.与变量名规则基本上是一样的!2.建议变量名使用名词,函数名用动词3.大小写敏感4.普通函数使用小驼峰,不要首字母大写5.首字母大写的函数一般用作自定义构造函数函数调用自定义函数名();匿名......
  • 学习Java第13天
    逻辑运算符packageoperator;//**逻辑运算符publicclassDemo05{publicstaticvoidmain(String[]args){//**与(**and)或(or)**非(取反)booleana=true;booleanb=false;System.out.println("a&&b:"+(a&&b));//*逻辑与运算:两个变量都为真,结果才为true**......
  • java加参数jar
    加参数启动jenkins nohupjava-Xmx3096m-Xms3096m-DHUDSON_HOME=/data/ci/jspace-jar/data/ci/jenkins.war --httpPort=port--ajp13Port=port&加参数启动中间件 java -XXXXX.jar“-Xmx1024m-Xms1024m-Xmn512m-Xss256k”——Java运行参数(转)年轻代年老代概念......
  • Java计算CRC16校验码
    废话不多说,直接上代码/***计算CRC16校验码**@parambytes需要计算的字节数组*/publicstaticbyte[]getCRCByteArray(byte[]bytes){//ModBus通信协议的CRC(冗余循环校验码含2个字节,即16位二进制数。//......
  • Java入门题-百钱买百鸡
    题:100钱买100只鸡,必须满足,钱花完,鸡百只 重点:循环语句来枚举所有可能性 代码:byteplan=1;for(inti=0;i<20;i++){for(inti1=0;i1<34;i1++){for(inti2=0;i2<101;i2++){if(((i*5+i1*3+i2)==100)&&((i+i1......
  • 基于JAVA的博客平台设计与实现
    随着互联网技术的快速发展,利用博客平台实现用户资讯的发布管理成为很多互联网公司研究的热门话题。通过对博客平台系统的网站功能需要进行讨论研究,这种资讯发布非常符合资讯发展的潮流,博客平台的实现将会对当前网站的信息推广产生不可估量的巨大浏览提升。正是鉴于此种对潜在用户主......