Menggunakan Anotasi @Builder Lombok

1. Ikhtisar

@Builder Project Lombok adalah mekanisme yang berguna untuk menggunakan pola Builder tanpa menulis kode boilerplate. Kita dapat menerapkan anotasi ini ke Kelas atau metode.

Dalam tutorial singkat ini, kita akan melihat kasus penggunaan yang berbeda untuk @Builder .

2. Ketergantungan Maven

Pertama, kita perlu menambahkan Project Lombok ke pom.xml kita :

 org.projectlombok lombok 1.18.10 

Maven Central memiliki Project Lombok versi terbaru di sini.

3. Menggunakan @Builder di Kelas

Dalam kasus penggunaan pertama, kami hanya mengimplementasikan Kelas , dan kami ingin menggunakan pembangun untuk membuat instance kelas kami.

Langkah pertama dan satu-satunya adalah menambahkan anotasi ke deklarasi kelas:

@Getter @Builder public class Widget { private final String name; private final int id; } 

Lombok melakukan semua pekerjaan untuk kami. Kami sekarang dapat membuat Widget dan mengujinya:

Widget testWidget = Widget.builder() .name("foo") .id(1) .build(); assertThat(testWidget.getName()) .isEqualTo("foo"); assertThat(testWidget.getId()) .isEqualTo(1);

Jika kita ingin membuat salinan atau hampir salinan objek, kita dapat menambahkan properti toBuilder = true ke anotasi @Builder :

@Builder(toBuilder = true) public class Widget { //... }

Ini memberitahu Lombok untuk menambahkan metode toBuilder () ke Kelas kita . Saat kita memanggil metode toBuilder () , ia mengembalikan builder yang diinisialisasi dengan properti instance tempat ia dipanggil:

Widget testWidget = Widget.builder() .name("foo") .id(1) .build(); Widget.WidgetBuilder widgetBuilder = testWidget.toBuilder(); Widget newWidget = widgetBuilder.id(2).build(); assertThat(newWidget.getName()) .isEqualTo("foo"); assertThat(newWidget.getId()) .isEqualTo(2);

Kita dapat melihat di kode pengujian bahwa kelas pembangun yang dibuat oleh Lombok dinamai seperti kelas kita, dengan "Builder" ditambahkan padanya - dalam kasus ini WidgetBuilder . Kita kemudian bisa memodifikasi properti yang kita inginkan dan membangun () sebuah instance baru.

Jika kita perlu menentukan bidang wajib, kita bisa menggunakan konfigurasi anotasi untuk membuat pembuat tambahan:

@Builder(builderMethodName = "internalBuilder") public class RequiredFieldAnnotation { @NonNull private String name; private String description; public static RequiredFieldAnnotationBuilder builder(String name) { return internalBuilder().name(name); } }

Dalam kasus ini, kami menyembunyikan pembangun default sebagai internalBuilder dan membuatnya sendiri. Jadi, saat kita membuat pembangun, kita harus memberikan parameter yang dibutuhkan:

RequiredField.builder("NameField").description("Field Description").build();

Selain itu, untuk memastikan bidang kami ada, kami dapat menambahkan anotasi @NonNull .

4. Menggunakan @Builder pada Metode

Misalkan kita menggunakan objek yang ingin kita buat dengan pembangun, tetapi kita tidak dapat mengubah sumber atau memperluas Kelas .

Pertama, mari buat contoh cepat menggunakan anotasi @Value Lombok:

@Value final class ImmutableClient { private int id; private String name; }

Sekarang kita memiliki Kelas terakhir dengan dua anggota tetap, getter untuk mereka, dan konstruktor semua argumen.

Kami membahas cara menggunakan @Builder di Kelas , tetapi kami juga dapat menggunakannya pada metode. Kami akan menggunakan kemampuan ini untuk mengatasi ketidakmampuan mengubah atau memperluas ImmutableClient .

Selanjutnya, kita akan membuat kelas baru dengan metode untuk membuat ImmutableClients:

class ClientBuilder { @Builder(builderMethodName = "builder") public static ImmutableClient newClient(int id, String name) { return new ImmutableClient(id, name); } }

Anotasi ini membuat metode bernama builder () yang mengembalikan Builder untuk membuat ImmutableClients .

Sekarang, mari membuat ImmutableClient :

ImmutableClient testImmutableClient = ClientBuilder.builder() .name("foo") .id(1) .build(); assertThat(testImmutableClient.getName()) .isEqualTo("foo"); assertThat(testImmutableClient.getId()) .isEqualTo(1);

5. Kesimpulan

Dalam artikel ini, kami menggunakan anotasi @Builder Lombok pada metode untuk membuat pembangun untuk Kelas akhir , dan kami melihat cara membuat beberapa bidang Kelas yang diperlukan.

Contoh kode, seperti biasa, dapat ditemukan di GitHub.