当你使用commons-beanutils.jar插件的BeanUtils.copyProperties对象拷贝功能时,尤其是涉及到对象深度拷贝的时候尽量避免下面例子:
不要把人装进了狗笼里面
List<Dog>本来只能添加Dog 但是却从里面取出一个Person
import java.util.List;
public class Dogs {
private String id;
private List<Dog> data;
public List<Dog> getData() {
return data;
}
public void setData(List<Dog> data) {
this.data = data;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
}
import java.util.List;
public class Persons {
private String id;
private List<Person> data;
public List<Person> getData() {
return data;
}
public void setData(List<Person> data) {
this.data = data;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
}
import java.util.Date;
public class Person {
private String name;
private Date dateAttr;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Date getDateAttr() {
return dateAttr;
}
public void setDateAttr(Date dateAttr) {
this.dateAttr = dateAttr;
}
}
import java.util.Date;
public class Dog {
private String name;
private Date dateAttr;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Date getDateAttr() {
return dateAttr;
}
public void setDateAttr(Date dateAttr) {
this.dateAttr = dateAttr;
}
}
import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import org.apache.commons.beanutils.BeanUtils;
import com.coderside.fragment.json.Dog;
import com.coderside.fragment.json.Persons;
import com.coderside.fragment.json.Dogs;
import com.coderside.fragment.json.Person;
public class Test {
public static void main(String[] args) {
//构造一个Persons对象
Persons persons = new Persons();
persons.setId("1");
Person p = new Person();
p.setDateAttr(new Date());
p.setName("dog");
List<Person> list = new ArrayList<Person>();
list.add(p);
persons.setData(list);
//构造一个Dogs对象
Dogs dogs = new Dogs();
try {
BeanUtils.copyProperties(dogs, persons);
for (int i = 0; i < dogs.getData().size(); i++) {
//打印出来的是一个人com.coderside.fragment.json.Person对象
System.out.println(dogs.getData().get(i));
// 下面这句看起来是正常的 运行就会抛异常
// Dog dog = dogs.getData().get(i);
}
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
}
分享到:
相关推荐
房子应有足够的空间供动物活动,并且需要配备狗笼、卫生用具、保暖衣物等基础设备。此外,食品和医疗资源是必不可少的,包括狗粮、玩具、药品以及建设狗场的材料。食物来源可以通过与餐厅合作或寻求志愿者捐赠来解决...
"狗笼"(Goulong)在这里可能是指一种特定的字体或者字体设计。在计算机领域,字体是用于呈现文本的图形元素,它规定了字符的形状、大小和样式。"Goulong"作为标签,我们可以推测它可能是一个具有独特风格或特征的...
这个小工具可让您设置唤醒时间,然后它将在指定的时间打开狗笼,让您的狗跳到床上唤醒您。固件固件基于ESP-IDF中的。 固件连接到WiFi网络并托管一个本地网站(以便连接到同一网络的任何设备都可以访问它)。 用户...
4. **环境卫生管理**:确保工作环境的清洁与消毒,如狗笼、地板、墙壁和水池等。 #### 自身适应情况: - 初期可能不太熟练,需要不断练习和学习。 - 在导师指导下逐步掌握各项技能,提升自己的专业水平。 - 能够...
基于springboot+Web的毕业设计选题系统源码数据库文档.zip
四大类垃圾,有害垃圾、可回收垃圾、厨余垃圾、其他垃圾,共四千张左右,包含小米电池等不寻常的垃圾,适用于2025工程实践与创新能力大赛。
ASP.NET在线培训考试系统源码 1、增加错题卡功能 2、升级html功能 3、系统代码,数据库,数据库存储过程等,都无任何加密,是全部源码。 4、优化升级版本,界面更美观。 一、技术特点: 1、系统基于微软先进的.Net平台,100%纯B/S架构模式,系统部署、维护方便,具有良好的开放性、伸缩性和可扩展性 2、系统试卷分为考试模式和作业模式,考试模式自动计时,作业模式不计时,可用于平常作业或练习;试卷出题方式可采用题序固定、题序随机或试题随机模式;试卷显示方式分为整卷模式和逐题模式;试题随机和逐题模式可有效防止作弊; 3、支持自定义题型功能,系统提供单选类、多选类、判断类、填空类、问答类、作文类、打字类和操作类等八大类基本题型,其中操作类试题提供了文件下载和上传功能,轻松实现Word、Excel、FrontPage、Visual Foxpro等对文件或文件夹的操作; 4、系统可对试题的科目、知识点、题型、难度、分数、试题内容和试题解析等属性进行设置,单选类、多选类试题支持6个选项,完全可以满足当前试题要求,少于6个选项,
onnxruntime-1.15.1-cp310-cp310-win_amd64.whl
numpy-1.16.0-cp35-cp35m-linux_armv7l.whl
AI视频数据集(交通路口摄像头视频)
java源码资源EJB中JNDI的使用源码例子提取方式是百度网盘分享地址
scipy-1.12.0-cp311-cp311-linux_armv7l.whl
numpy-1.21.1-cp37-cp37m-linux_armv7l.whl
ta_lib-0.5.1-cp313-cp313-win32.whl
基于springboot的学生服务平台源码数据库文档微信小程序.zip
基于springboot旅游管理系统源码数据库文档.zip
PDF电子发票信息提取,支持将pdf发票文件夹下的剩所有发票,转为excel格式的信息,对于发票量比较大,不好统计,需要一个一个去统计的情况,可节省2个点以上的时间,一次下载,终身有效。
Pillow-7.2.0-cp37-cp37m-linux_armv7l.whl
基于springboot的银行信用卡额度管理系统源码数据库文档.zip
基于JavaScript的在线考试系统源码数据库文档.zip