BeanUtils.copyProperties()无法复制List集合,制作通用工具类来解决。 1. 需求分析
- BeanUtils.copyProperties(source,target),用于把source实体的属性值复制给target实体(同名属性可复制)
- 当需要对List进行整体复制到另一个List时,此方法达不到预期。
- 查了网上资料,大多推荐使用循坏对entiy遍历进行BeanUtils.copyProperties操作。
- 单一对entiy的循环,降低了复用性,个人不喜欢。
- 想利用反射的机制,做一个复用性强一些的工具类,实现对List对不同的class的复制。
2. 两个实体类
@Data
public class Student {private int id;
private String name;
private int age;
public Student(int id, String name, int age) {
this.id = id;
this.name = name;
this.age = age;
}
}
@Data
@AllArgsConstructor
@NoArgsConstructor
public class StudentBoss {private int id;
private String name;
private int age;
private String address;
}
3. 反射转换
public List exchange(List> source, Class clz) throws Exception {
List res = new ArrayList<>();
for (Object o : source) {
T t = clz.getConstructor().newInstance();
//实例化
BeanUtils.copyProperties(o,t);
//复制同名属性值
res.add(t);
}
return res;
}
4. 测试代码
@Test
public void copyproperties() throws Exception {
List stu = new ArrayList<>();
stu.add(new Student(1, "小明", 12));
stu.add(new Student(2, "小明1", 13));
System.out.println("student=>"+stu);
List exchange = exchange(stu, StudentBoss.class);
System.out.println("studentBoos=>"+exchange);
}
5. 测试结果
文章图片
6. 总结
【spring|BeanUtils.copyProperties()无法复制List<entiy>集合,制作通用工具类来解决。】平时多思考复用性,在开发中可以有效提升开发效率,同时也可以提升自身对面向对象的理解。坚持对反射内容的研究。学无止境
推荐阅读
- spring|springboot项目结构目录简介
- avue|element-ui的el-upload组件上传单张图,不显示图片列表。
- avue|Avue中实现多选删除功能
- spring|使用swagger遇到的问题-启动服务出现空指针异常(Unable to scan documentation context default)
- avue|Avue 远程搜索输入框,联动赋值其他组件 v2.7.10及以下
- MyBatis-Plus笔记|MybatisPlus学习笔记------CRUD操作---insert操作
- mysql|mysql replace的死锁分析(二)
- 总结知识点|Dagger2的基本使用
- #+|Java控制语句