1. ホーム
  2. java

[解決済み] Lombok toBuilder()メソッドは、フィールドのディープコピーを作成するか?

2022-02-18 15:26:26

質問

を使っています。 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