java - Lombok toBuilder() 方法是否创建字段的深层副本
问题描述
我正在使用toBuilder()
对象实例来创建构建器实例,然后构建方法来创建新实例。原始对象有一个列表,新对象是否引用了相同的列表或它的副本?
@Getter
@Setter
@AllArgsConstructor
public class Library {
private List<Book> books;
@Builder(toBuilder=true)
public Library(final List<Book> books){
this.books = books;
}
}
Library lib2 = lib1.toBuilder().build();
lib2 书籍会引用与 lib1 书籍相同的列表吗?
解决方案
是的,@Builder(toBuilder=true)
注释不执行对象的深层复制,只复制字段的引用。
List<Book> books = new ArrayList<>();
Library one = new Library(books);
Library two = one.toBuilder().build();
System.out.println(one.getBooks() == two.getBooks()); // true, same reference
推荐阅读
- android - 没有 react-native 是否可以在 Android 和/或 iOS 的后台任务中收集地理位置信息?
- selenium - How to handle Auto suggestion in selenium?
- css - CSS背景过滤器在其后面的内容移动时不会更新
- javascript - 剑道ui网格Fiter模式:行
- admin - 以自定义频率调度 informatica 工作流
- css - 如何正确使用媒体查询来达到这个结果?
- c++ - 特征库,Jacobi SVD
- c# - 如何在我的 Azure Service Fabric 应用程序中注入 IHttpClientFactory?
- java - 将 Maven 项目部署到 Tomcat 无法连接到 Postgres
- excel - 命令将 0 添加到相关列和单元格 - Excel vba