Menggunakan Anotasi @Aksesor Lombok

1. Gambaran keseluruhan

Cukup tipikal untuk mendapatkan dan menetapkan kaedah dalam objek domain kami, tetapi ada cara lain yang mungkin kami dapati lebih jelas.

Dalam tutorial ini, kita akan mengetahui tentang anotasi @Aksesor Project Lombok dan sokongannya untuk aksesori yang lancar, dirantai, dan tersuai.

Namun, sebelum meneruskan, IDE kami memerlukan pemasangan Lombok.

2. Aksesori Standard

Sebelum kita melihat @Accessors penjelasan, biarlah ulasan ini bagaimana Lombok merawat @Getter dan @Setter penjelasan secara lalai.

Pertama, mari buat kelas kami:

@Getter @Setter public class StandardAccount { private String name; private BigDecimal balance; }

Dan sekarang mari buat kes ujian. Kami dapat melihat dalam ujian kami bahawa Lombok telah menambahkan kaedah getter dan setter khas:

@Test public void givenStandardAccount_thenUseStandardAccessors() { StandardAccount account = new StandardAccount(); account.setName("Basic Accessors"); account.setBalance(BigDecimal.TEN); assertEquals("Basic Accessors", account.getName()); assertEquals(BigDecimal.TEN, account.getBalance()); }

Kita akan melihat bagaimana kes ujian ini berubah ketika kita melihat pilihan @Accessor .

3. Aksesori lancar

Mari mulakan dengan pilihan fasih :

@Accessors(fluent = true)

Pilihan yang lancar memberi kita aksesori yang tidak mempunyai awalan get atau set .

Kami akan melihat pilihan rantai sebentar, tetapi kerana ia diaktifkan secara lalai, mari kita lumpuhkannya secara eksplisit buat masa ini:

@Accessors(fluent = true, chain = false) @Getter @Setter public class FluentAccount { private String name; private BigDecimal balance; }

Sekarang, ujian kami masih berkelakuan sama, tetapi kami telah mengubah cara kami mengakses dan mengubah keadaan:

@Test public void givenFluentAccount_thenUseFluentAccessors() { FluentAccount account = new FluentAccount(); account.name("Fluent Account"); account.balance(BigDecimal.TEN); assertEquals("Fluent Account", account.name()); assertEquals(BigDecimal.TEN, account.balance()); }

Perhatikan bagaimana awalan get and set telah hilang.

4. Aksesori Berantai

Sekarang mari kita lihat pilihan rantaian :

@Accessors(chain = true)

The rantaian pilihan memberikan kita penetap yang kembali ini . Lagi ambil perhatian bahawa ingkarnya benar , tetapi kita akan menetapkan ia jelas untuk kejelasan.

Ini bermaksud kita dapat mengaitkan operasi pelbagai set dalam satu pernyataan.

Mari kita gunakan aksesor yang lancar dan ubah pilihan rantai menjadi benar :

@Accessors(fluent = true, chain = true) @Getter @Setter public class ChainedFluentAccount { private String name; private BigDecimal balance; } 

Kami mendapat kesan yang sama jika kita meninggalkan rantai dan hanya menyatakan:

@Accessors(fluent = true)

Dan sekarang mari kita lihat bagaimana ini mempengaruhi kes ujian kami:

@Test public void givenChainedFluentAccount_thenUseChainedFluentAccessors() { ChainedFluentAccount account = new ChainedFluentAccount() .name("Fluent Account") .balance(BigDecimal.TEN); assertEquals("Fluent Account", account.name()); assertEquals(BigDecimal.TEN, account.balance()); }

Perhatikan bagaimana pernyataan baru menjadi lebih panjang dengan pengikat yang dirantai bersama-sama, menghilangkan beberapa papan boiler.

Ini, sudah tentu, adalah bagaimana Lombok @Builder menggunakan rantai ed fasih Pengakses.

5. Aksesori Awalan

Dan akhirnya, kadang-kadang ladang kita mungkin mempunyai konvensyen penamaan yang berbeza daripada yang ingin kita dedahkan melalui getter dan setter.

Mari pertimbangkan kelas berikut yang menggunakan Notasi Hungary untuk bidangnya:

public class PrefixedAccount { private String sName; private BigDecimal bdBalance; }

Sekiranya kita mendedahkan ini dengan @Getter dan @Setter , kita akan mendapat kaedah seperti getSName , yang tidak begitu mudah dibaca.

Pilihan awalan membolehkan kita memberitahu Lombok awalan mana yang harus diabaikan:

@Accessors(prefix = {"s", "bd"}) @Getter @Setter public class PrefixedAccount { private String sName; private BigDecimal bdBalance; }

Oleh itu, mari kita lihat bagaimana perkara itu mempengaruhi kes ujian kami:

@Test public void givenPrefixedAccount_thenRemovePrefixFromAccessors() { PrefixedAccount account = new PrefixedAccount(); account.setName("Prefixed Fields"); account.setBalance(BigDecimal.TEN); assertEquals("Prefixed Fields", account.getName()); assertEquals(BigDecimal.TEN, account.getBalance()); }

Perhatikan bagaimana aksesor untuk bidang sName kami ( setName, getName ) menghilangkan s terkemuka dan aksesori untuk bdBalance menghilangkan bd terkemuka .

Walau bagaimanapun, Lombok hanya menggunakan awalan apabila awalan diikuti oleh sesuatu selain huruf kecil.

Ini memastikan bahawa jika kita mempunyai medan yang tidak menggunakan Hungarian Notation, seperti negeri, tetapi bermula dengan salah satu awalan kami, s , kita tidak berakhir dengan getTate ()!

Terakhir, katakan kita ingin menggunakan garis bawah dalam notasi kita tetapi juga ingin mengikutinya dengan huruf kecil.

Mari tambah medan s_notes dengan awalan s_:

@Accessors(prefix = "s_") private String s_notes;

Mengikuti peraturan huruf kecil kita akan mendapatkan kaedah seperti getS_Notes () , jadi Lombok juga menggunakan awalan apabila awalan itu sendiri berakhir pada sesuatu yang bukan huruf .

6. Sifat Konfigurasi

Kami dapat menetapkan lalai keseluruhan projek atau direktori untuk kombinasi tetapan kegemaran kami dengan menambahkan sifat konfigurasi ke fail lombok.config :

lombok.accessors.chain=true lombok.accessors.fluent=true

Lihat Panduan Konfigurasi Ciri Lombok untuk keterangan lebih lanjut.

7. Kesimpulannya

Dalam artikel ini, kami menggunakan pilihan fasih, rantai, dan awalan anotasi @Aksesor Lombok dalam pelbagai kombinasi untuk melihat bagaimana ia mempengaruhi kod yang dihasilkan.

Untuk mengetahui lebih lanjut, pastikan untuk melihat Panduan Ciri JavaDoc dan Eksperimen Lombok Accessors.

Seperti biasa, sumber untuk artikel ini terdapat di GitHub.