对象属性复制常用方法包括:1. 手动getter/setter,适用于简单对象;2. Spring BeanUtils,便捷高效,适合Spring项目;3. MapStruct,编译期生成,性能高;4. 序列化实现深拷贝,完整隔离引用但性能低;5. Cloneable接口,需重写支持深拷贝。选择依据场景需求与性能权衡。

在 Java 中,将一个对象的属性复制到另一个对象是开发中常见的需求,比如在 DTO 转换、缓存处理或避免对象引用污染时。实现方式有多种,各有适用场景和优缺点。以下是几种主流的对象属性复制方法。
1. 手动 Getter/Setter 赋值
最直接的方式是通过调用源对象的 getter 方法获取属性值,再通过目标对象的 setter 方法设置。
- 适用于属性少、结构简单的对象
- 代码清晰,易于调试
- 但当属性较多时,代码冗长且易出错
示例:
User user = new User();
user.setName("张三");
user.setAge(25);
UserInfo userInfo = new UserInfo();
userInfo.setName(user.getName());
userInfo.setAge(user.getAge());
2. 使用 BeanUtils 工具类(Apache 或 Spring)
借助第三方工具类可以自动完成同名属性的拷贝,大幅减少样板代码。
立即学习“Java免费学习笔记(深入)”;
- Apache Commons BeanUtils:功能强大,但性能较差,且依赖较多
- Spring BeanUtils:轻量、高效,推荐在 Spring 项目中使用
- 仅支持 public 属性和标准 getter/setter
- 不同类型属性不会自动转换(除非使用 ConvertUtils)
Spring BeanUtils 示例:
User source = new User("李四", 30);
UserCopy target = new UserCopy();
org.springframework.beans.BeanUtils.copyProperties(source, target);
注意:copyProperties 按属性名匹配,忽略 null 值(默认行为),不递归复制复杂嵌套对象。
3. 使用 MapStruct 等编译期生成映射代码
MapStruct 是一个注解处理器,能在编译时生成类型安全的映射实现类,性能高且可定制。
标签: java apache 处理器 app 工具 stream
还木有评论哦,快来抢沙发吧~