Lombok Builder dengan Custom Setter

1. Perkenalan

Project Lombok adalah pustaka Java yang populer untuk membantu mengurangi jumlah kode boilerplate yang perlu ditulis oleh pengembang.

Dalam tutorial ini, kita akan melihat cara kerja anotasi @Builder Lombok dan bagaimana kita dapat menyesuaikannya untuk kebutuhan spesifik kita.

2. Ketergantungan Maven

Mari kita mulai dengan menambahkan ketergantungan ke pom.xml kita :

 org.projectlombok lombok 1.18.10 

3. Anotasi Pembuat Lombok

Sebelum kita melihat ke dalam menyesuaikan kelas builder yang dihasilkan Lombok, mari kita lakukan rekap cepat tentang cara kerja anotasi Lombok @Builder . Kami sudah memiliki pengenalan lengkap tentang fitur-fitur Lombok.

The @Builder penjelasan dapat digunakan untuk secara otomatis menghasilkan pembangun untuk kelas kami . Sebagai contoh, kami akan menggunakan sistem perpesanan di mana satu pengguna dapat mengirim pesan ke pengguna lain. Pesannya bisa berupa string teks sederhana atau File . Menggunakan Lombok, kita dapat mendefinisikan kelas Message kita sebagai berikut:

@Builder @Data public class Message { private String sender; private String recipient; private String text; private File file; }

@Data menghasilkan semua boilerplate yang biasanya dikaitkan dengan POJO sederhana (Objek Java Lama Biasa): getter untuk semua bidang, penyetel untuk semua bidang non-final, dan implementasi toString , sama , dan hashCode yang sesuai , dan konstruktor.

Dengan menggunakan builder yang dihasilkan, sekarang kita dapat membuat instance dari kelas Message :

Message message = Message.builder() .sender("[email protected]") .recipient("[email protected]") .text("How are you today?") .build();

The @Builder penjelasan juga mendukung nilai-nilai default untuk atribut tapi kita tidak akan membahas itu sekarang. Dari contoh ini, jelas terlihat bahwa anotasi @Builder cukup kuat dan dapat menggantikan banyak kode boilerplate.

4. Menyesuaikan Pembangun Lombok

Bagian sebelumnya menunjukkan bagaimana kita dapat menggunakan Lombok untuk menghasilkan kelas pembangun. Tetapi mungkin ada kasus di mana pembangun yang dihasilkan tidak cukup. Dalam contoh kami, kami memiliki batasan bahwa pesan hanya dapat berisi teks atau file. Itu tidak bisa memiliki keduanya. Lombok tentu saja tidak tahu dan pembangun yang dihasilkan akan dengan senang hati mengizinkan kita masuk ke negara ilegal itu.

Untungnya kami dapat mengatasi masalah ini dengan menyesuaikan pembangun.

Menyesuaikan pembuat Lombok itu sederhana dan mudah: kita menulis bagian dari pembuat yang ingin kita sesuaikan dan anotasi Lombok @Builder tidak akan menghasilkan bagian-bagian itu . Jadi dalam contoh kami, itu adalah:

public static class MessageBuilder { private String text; private File file; public MessageBuilder text(String text) { this.text = text; verifyTextOrFile(); return this; } public MessageBuilder file(File file) { this.file = file; verifyTextOrFile(); return this; } private void verifyTextOrFile() { if (text != null && file != null) { throw new IllegalStateException("Cannot send 'text' and 'file'."); } } }

Harap dicatat bahwa kami tidak harus menyatakan pengirim dan anggota penerima , atau metode pembuat yang terkait dengan mereka. Lombok masih akan menghasilkannya untuk kita.

Jika kami mencoba membuat instance Message dengan teks dan file dengan kode berikut:

Message message = Message.builder() .sender("[email protected]") .recipient("[email protected]") .text("How are you today?") .file(new File("/path/to/file")) .build();

Ini akan menghasilkan pengecualian berikut:

Exception in thread "main" java.lang.IllegalStateException: Cannot send 'text' and 'file'.

5. Kesimpulan

Di artikel singkat ini, kami melihat cara menyesuaikan pembuat Lombok.

Seperti biasa, kode tersedia di GitHub.