Baru mulai menggunakan Lombok hari ini. Sejauh ini saya menyukainya, tetapi satu kekurangan yang tidak saya lihat disebutkan adalah dukungan refactoring.
Jika Anda memiliki kelas yang dianotasi @Data
, itu akan menghasilkan getter dan setter untuk Anda berdasarkan nama bidang. Jika Anda menggunakan salah satu getter di kelas lain, lalu memutuskan bahwa field tersebut tidak memiliki nama yang baik, ia tidak akan menemukan penggunaan getter dan setter tersebut dan mengganti nama lama dengan nama baru.
Saya akan membayangkan ini harus dilakukan melalui plug-in IDE dan bukan melalui Lombok.
PEMBARUAN (22 Jan '13)
Setelah menggunakan Lombok selama 3 bulan, saya masih merekomendasikannya untuk sebagian besar proyek. Namun, saya menemukan kelemahan lain yang serupa dengan yang tercantum di atas.
Jika Anda memiliki kelas, katakanlah MyCompoundObject.java
memiliki 2 anggota, keduanya beranotasi dengan @Delegate
, katakan myWidgets
dan myGadgets
, ketika Anda menelepon myCompoundObject.getThingies()
dari kelas lain, tidak mungkin untuk mengetahui apakah itu mendelegasikan ke Widget
atau Gadget
karena Anda tidak lagi dapat melompat ke sumber dalam IDE.
Menggunakan Eclipse "Hasilkan Metode Delegasi ..." memberi Anda fungsionalitas yang sama, sama cepatnya dan memberikan lompatan sumber. Kelemahannya adalah itu mengacaukan sumber Anda dengan kode boilerplate yang mengambil fokus dari hal-hal penting.
UPDATE 2 (26 Feb '13)
Setelah 5 bulan, kami masih menggunakan Lombok, tetapi saya memiliki beberapa gangguan lainnya. Kurangnya pengambil dan penyetel yang dideklarasikan dapat mengganggu saat Anda mencoba membiasakan diri dengan kode baru.
Sebagai contoh, jika saya melihat metode yang disebut getDynamicCols()
tetapi saya tidak tahu tentang apa itu, saya memiliki beberapa rintangan ekstra untuk melompat untuk menentukan tujuan dari metode ini. Beberapa rintangannya adalah Lombok, ada juga yang kekurangan plugin pintar Lombok. Rintangan termasuk:
- Kurangnya JavaDocs. Jika saya javadoc lapangan, saya berharap pengambil dan penyetel akan mewarisi javadoc melalui langkah kompilasi Lombok.
- Langsung ke definisi metode melompat saya ke kelas, tetapi bukan properti yang menghasilkan pengambil. Ini adalah masalah plugin.
- Jelas Anda tidak dapat mengatur breakpoint dalam pengambil / penyetel kecuali Anda menghasilkan atau kode metode.
- CATATAN: Pencarian Referensi ini bukan masalah seperti yang saya pikirkan sebelumnya. Anda harus menggunakan perspektif yang memungkinkan tampilan Outline. Bukan masalah bagi kebanyakan pengembang. Masalah saya adalah saya menggunakan Mylyn yang memfilter
Outline
pandangan saya , jadi saya tidak melihat metode. Kurangnya referensi pencarian. Jika saya ingin melihat siapa yang menelepon getDynamicCols(args...)
, saya harus membuat atau memberi kode pada setter untuk dapat mencari referensi.
UPDATE 3 (Mar 7 '13)
Belajar menggunakan berbagai cara untuk melakukan sesuatu di Eclipse kurasa. Anda benar-benar dapat mengatur breakpoint bersyarat (BP) pada metode yang dihasilkan Lombok. Menggunakan Outline
tampilan, Anda dapat mengklik kanan metode untuk Toggle Method Breakpoint
. Kemudian ketika Anda menekan BP, Anda dapat menggunakan tampilan debugging Variables
untuk melihat apa metode yang dihasilkan menamai parameter (biasanya sama dengan nama bidang) dan akhirnya, gunakan Breakpoints
tampilan untuk mengklik kanan BP dan pilih Breakpoint Properties...
untuk menambahkan kondisi. Bagus.
UPDATE 4 (16 Agustus '13)
Netbeans tidak menyukainya ketika Anda memperbarui dependensi Lombok Anda di Maven pom Anda. Proyek masih mengkompilasi, tetapi file ditandai karena memiliki kesalahan kompilasi karena tidak dapat melihat metode yang dibuat Lombok. Menghapus cache Netbeans menyelesaikan masalah. Tidak yakin apakah ada opsi "Bersihkan Proyek" seperti yang ada di Eclipse. Masalah kecil, tetapi ingin membuatnya diketahui.
UPDATE 5 (17 Jan '14)
Lombok tidak selalu bermain baik dengan Groovy, atau setidaknya groovy-eclipse-compiler
. Anda mungkin harus menurunkan versi kompiler Anda.
Maven Groovy dan Jawa + Lombok
UPDATE 6 (26 Jun '14)
Sebuah kata peringatan. Lombok sedikit membuat ketagihan dan jika Anda mengerjakan suatu proyek di mana Anda tidak dapat menggunakannya karena suatu alasan, Lombok akan mengganggu Anda. Anda mungkin lebih baik tidak pernah menggunakannya sama sekali.
UPDATE 7 (23 Juli '14)
Ini adalah pembaruan yang menarik karena langsung membahas keamanan mengadopsi Lombok yang ditanyakan OP.
Pada v1.14, @Delegate
anotasi telah diturunkan ke status Eksperimental. Rinciannya didokumentasikan di situs mereka ( Lombok Delegate Docs ).
Masalahnya adalah, jika Anda menggunakan fitur ini, opsi backout Anda terbatas. Saya melihat opsi sebagai:
- Hapus
@Delegate
anotasi secara manual dan hasilkan / handcode kode delegasi. Ini sedikit lebih sulit jika Anda menggunakan atribut dalam anotasi.
- Delombok file yang memiliki
@Delegate
anotasi dan mungkin menambahkan kembali dalam anotasi yang Anda inginkan.
- Jangan pernah memperbarui Lombok atau memelihara garpu (atau hidup dengan menggunakan fitur pengalaman).
- Delombok seluruh proyek Anda dan berhenti menggunakan Lombok.
Sejauh yang saya tahu, Delombok tidak memiliki opsi untuk menghapus subset dari anotasi ; itu semua atau tidak sama sekali setidaknya untuk konteks satu file. Saya membuka tiket untuk meminta fitur ini dengan bendera Delombok, tetapi saya tidak akan mengharapkan itu dalam waktu dekat.
UPDATE 8 (20 Okt '14)
Jika ini merupakan pilihan bagi Anda, Groovy menawarkan sebagian besar manfaat yang sama dari Lombok, plus banyak fitur lainnya, termasuk @Delegate . Jika Anda berpikir Anda akan kesulitan menjual ide kepada kekuatan yang ada, lihat @CompileStatic
atau @TypeChecked
anotasi untuk melihat apakah itu dapat membantu perjuangan Anda. Faktanya, fokus utama dari rilis Groovy 2.0 adalah keamanan statis .
UPDATE 9 (Sep 1 '15)
Lombok masih dipelihara dan ditingkatkan secara aktif , yang menjadi pertanda baik untuk tingkat keamanan adopsi. The @Builder penjelasan adalah salah satu fitur favorit saya baru.
UPDATE 10 (17 Nov '15)
Ini mungkin tidak terkait langsung dengan pertanyaan OP, tetapi layak untuk dibagikan. Jika Anda mencari alat untuk membantu Anda mengurangi jumlah kode boilerplate yang Anda tulis, Anda juga dapat memeriksa Google Auto - khususnya AutoValue . Jika Anda melihat slide deck mereka , daftar Lombok sebagai solusi yang mungkin untuk masalah yang mereka coba selesaikan. Kontra yang mereka daftarkan untuk Lombok adalah:
- Kode yang dimasukkan tidak terlihat (Anda tidak dapat "melihat" metode yang dihasilkannya) [ed note - sebenarnya Anda bisa, tetapi itu hanya membutuhkan dekompiler]
- Retasan kompiler tidak standar dan rapuh
- "Dalam pandangan kami, kode Anda tidak lagi benar-benar Java"
Saya tidak yakin seberapa besar saya setuju dengan evaluasi mereka. Dan mengingat kontra dari AutoValue yang didokumentasikan dalam slide, saya akan tetap dengan Lombok (jika Groovy bukan pilihan).
PEMBARUAN 11 (8 Februari '16)
Saya menemukan Spring Roo memiliki beberapa anotasi serupa . Saya sedikit terkejut mengetahui bahwa Roo masih ada dan menemukan dokumentasi untuk penjelasannya agak kasar. Penghapusan juga tidak terlihat semudah de-lombok. Lombok sepertinya pilihan yang lebih aman.
UPDATE 12 (17 Feb '16)
Ketika mencoba mencari pembenaran untuk alasan mengapa aman membawa Lombok untuk proyek yang sedang saya kerjakan, saya menemukan sepotong emas yang ditambahkan dengan v1.14
- Sistem Konfigurasi ! Ini artinya Anda dapat mengonfigurasi proyek untuk menonaktifkan fitur tertentu yang dianggap tidak aman atau tidak diinginkan oleh tim Anda. Lebih baik lagi, itu juga dapat membuat konfigurasi direktori khusus dengan pengaturan yang berbeda. Ini LUAR BIASA.
UPDATE 13 (4 Okt '16)
Jika hal seperti ini penting bagi Anda, Oliver Gierke merasa aman untuk menambahkan Lombok ke Spring Data Rest .
UPDATE 14 (Sep 26 '17)
Seperti yang ditunjukkan oleh @gavenkoa dalam komentar pada pertanyaan OPs , dukungan kompiler JDK9 belum tersedia (Masalah # 985). Ini juga terdengar seperti itu tidak akan menjadi perbaikan yang mudah bagi tim Lombok untuk berkeliling.
UPDATE 15 (26 Mar 1818)
Lombok changelog menunjukkan pada v1.16.20 " Kompilasi lombok di JDK1.9 sekarang mungkin " meskipun # 985 masih terbuka.
Namun, perubahan untuk mengakomodasi JDK9 mengharuskan beberapa perubahan; semua diisolasi untuk perubahan dalam konfigurasi standar. Agak memprihatinkan bahwa mereka memperkenalkan pemecahan perubahan, tetapi versi ini hanya menabrak nomor versi "Tambahan" (dari v1.16.18 ke v1.16.20). Karena postingan ini adalah tentang keamanan, jika Anda memiliki sistem yarn/npm
seperti build yang secara otomatis ditingkatkan ke versi incremental terbaru, Anda mungkin berada dalam kondisi sulit.
UPDATE 16 (9 Jan '19)
Tampaknya masalah JDK9 telah diselesaikan dan Lombok bekerja dengan JDK10, dan bahkan JDK11 sejauh yang saya tahu.
Satu hal yang saya perhatikan dari aspek keselamatan adalah fakta bahwa log perubahan dari v1.18.2 ke v1.18.4 mencantumkan dua item sebagai BREAKING CHANGE
!? Saya tidak yakin bagaimana perubahan yang terjadi terjadi pada pembaruan "tambalan" semver. Bisa jadi masalah jika Anda menggunakan alat yang memperbarui versi tambalan secara otomatis.
javac
untuk membuka akses kesun.*
kelas internal ((