Saya suka proyek Lombok tetapi hari ini saya membaca dan mencoba beberapa fitur baru java 14.
Di dalam kapabilitas baru, ada kata kunci rekam yang memungkinkan membuat kelas dengan fungsi bawaan berikut sudah ada: konstruktor, bidang final pribadi, pengakses, kode sama / hash, getter, metode toString.
Sekarang pertanyaan saya adalah: lebih baik mengandalkan fitur Lombok atau haruskah kita mulai menggunakan fungsionalitas rekam:
Lebih baik menggunakan ini:
record Person (String name, String surname) {}
atau itu:
@AllArgsConstructor
@ToString
@EqualsAndHashCode
public class GetterSetterExample {
@Getter private int name;
@Getter private int surname;
}
Apa pro dan kontra dari kedua pendekatan tersebut?
record
tidak akan bekerja untuk hal-hal yang mengharapkan getter dan setter gaya JavaBeans.alice.phoneNumber()
daripada JavaBeans konvensi awalan denganget
, seperti padaalice.getPhoneNumber()
.record
fitur adalah fitur preview , belum siap untuk digunakan dalam produksi.Jawaban:
Lombok, dan
record
fitur bahasa Jawa, adalah alat yang berbeda untuk hal yang berbeda. Ada beberapa tumpang tindih yang dangkal, tetapi jangan biarkan itu mengganggu Anda.Lombok sebagian besar tentang kenyamanan sintaksis ; ini adalah prosesor-makro yang sudah dimuat sebelumnya dengan beberapa pola kode bermanfaat yang diketahui. Itu tidak memberi semantik apa pun; itu hanya mengotomatiskan pola, menurut beberapa tombol yang Anda atur dalam kode dengan anotasi. Lombok murni tentang kenyamanan menerapkan kelas pembawa data.
Rekaman adalah fitur semantik ; mereka adalah tupel nominal . Dengan membuat deklarasi semantik yang
Point
merupakan tupel(int x, int y)
, kompiler dapat memperoleh perwakilannya, serta konstruksi, deklarasi, kesetaraan, hashing, dan protokol representasi string, dari deskripsi keadaan ini. Karena mereka membawa semantik, pembaca dan kerangka kerja juga dapat bernalar dengan kepercayaan yang lebih tinggi tentang API catatan. (Ini mungkin juga nyaman secara sintaksis; jika demikian, itu bagus.)sumber
Saya telah bermain-main dengan kombinasi ini untuk beberapa waktu juga dan dengan sedikit latihan saya bisa menuliskan perbedaan berikut:
Lombok
@Getter, @AllArgsConstructor, @ToString, @EqualsAndHashCode
.EqualsAndHashCode
tidak sama dengan yang Anda harapkan ketika bermigrasi ke catatan .Rekaman
Tentu saja, setiap hari, selalu bijaksana berdasarkan persyaratan proyek untuk memilih cara mana yang harus diikuti dan dipraktikkan.
sumber
NB: Alih-alih pohon natal anotasi itu, Anda bisa menggunakannya
@Value
di kelas. Perhatikan bahwa ini membuat kelas menjadi final, dan membuat semua bidang menjadi pribadi dan final, dan memberi Anda semua sisanya juga. Ini dekat dengan apa catatan itu (mereka juga final, dan semua bidang di dalamnya adalah final).record
masih dalam pratinjau, jadi untuk kode produksi, jelas itu belum cocok. Gunakan lombok.Setelah catatan keluar dari pratinjau, itu lebih rumit. Lombok JAUH lebih fleksibel; Anda dapat dengan mudah bertukar dalam beberapa aspek baru tanpa harus menulis ulang semua kode (Anda bisa, misalnya, menambahkan klausa 'extends' ke kelas Anda tanpa harus kemudian menulis dengan tangan sama dengan dan metode kode hash; sesuatu catatan tidak bisa memberi Anda). Lombok juga memberi Anda lebih banyak fitur: Misalnya Anda dapat menambahkan pembangun dengan menambahkan
@Builder
anotasi; bukan sesuatu yang bisa dilakukan oleh catatan.Jika sangat tidak mungkin Anda akan menggunakan semua itu untuk kelas yang Anda rancang - saya akan menggunakan catatan.
PENOLAKAN: Saya kontributor inti untuk Proyek Lombok.
sumber