Java8 深拷贝 List<BusinessDomainVo> 对象 - 两种方法详解
在Java中,深拷贝是指创建一个新的对象,该对象与原始对象的所有属性都是相互独立的,即修改新对象不会影响原始对象。在Java8中,可以使用以下方法实现深拷贝:
- 实现Serializable接口并使用序列化/反序列化:
import java.io.Serializable;
public class BusinessDomainVo implements Serializable {
// 属性和方法定义
public BusinessDomainVo deepCopy() {
try {
ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(bos);
oos.writeObject(this);
ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray());
ObjectInputStream ois = new ObjectInputStream(bis);
return (BusinessDomainVo) ois.readObject();
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
}
然后,在需要进行深拷贝的地方调用deepCopy()方法:
List<BusinessDomainVo> originalList = new ArrayList<>();
// 添加元素到originalList...
List<BusinessDomainVo> copiedList = originalList.stream()
.map(BusinessDomainVo::deepCopy)
.collect(Collectors.toList());
- 使用BeanUtils工具类:
import org.apache.commons.beanutils.BeanUtils;
public class BusinessDomainVo {
// 属性和方法定义
public BusinessDomainVo deepCopy() {
try {
BusinessDomainVo copy = new BusinessDomainVo();
BeanUtils.copyProperties(copy, this);
return copy;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
}
同样,在需要进行深拷贝的地方调用deepCopy()方法:
List<BusinessDomainVo> originalList = new ArrayList<>();
// 添加元素到originalList...
List<BusinessDomainVo> copiedList = originalList.stream()
.map(BusinessDomainVo::deepCopy)
.collect(Collectors.toList());
以上两种方法都可以实现深拷贝,选择哪种方法取决于你的具体需求和项目环境。
原文地址: https://www.cveoy.top/t/topic/qDtk 著作权归作者所有。请勿转载和采集!