Lombok'u bugün kullanmaya başladım. Şimdiye kadar beğendim, ancak bahsetmediğim bir dezavantaj desteği yeniden düzenleme oldu.
Açıklamalı bir sınıfınız varsa @Data
, alan adlarına göre sizin için alıcıları ve ayarlayıcıları oluşturur. Başka bir sınıfta bu alıcılardan birini kullanırsanız, alanın adının iyi olmadığına karar verirseniz, bu alıcıların ve ayarlayıcıların kullanımlarını bulamaz ve eski adı yeni adla değiştirmez.
Bunun Lombok aracılığıyla değil, bir IDE eklentisi ile yapılması gerektiğini düşünürdüm.
GÜNCELLEME (22 Ocak 13)
Lombok'u 3 ay kullandıktan sonra hala birçok proje için tavsiye ederim. Ancak, yukarıda listelenene benzer başka bir dezavantaj buldum.
Eğer bir sınıf varsa, demek MyCompoundObject.java
hem açıklamalı, yani 2 üye var @Delegate
demek, myWidgets
ve myGadgets
Aradığınızda, myCompoundObject.getThingies()
başka bir sınıftan, bunun için temsilci seçme eğer bilmek imkansızWidget
ya da Gadget
IDE içinde kaynağına yapabilirsiniz artık atlama çünkü.
Eclipse kullanmak "Delege Yöntemleri Oluştur ..." aynı işlevsellik sağlar, aynı hızlı ve kaynak atlama sağlar. Dezavantajı, kaynağınızı önemli şeylerden odaklanan kazan plakası koduyla keser.
GÜNCELLEME 2 (26 Şubat '13)
5 ay sonra hala Lombok kullanıyoruz, ama başka sıkıntılarım var. Bildirilen bir alıcı ve ayarlayıcı eksikliği, yeni kodu tanımak için zaman zaman sinir bozucu olabilir.
Örneğin, adı verilen bir yöntem görürsem getDynamicCols()
ama bunun ne hakkında olduğunu bilmiyorsam, bu yöntemin amacını belirlemek için atlamak için ekstra engellerim var. Bazı engeller Lombok, bazıları Lombok akıllı eklentisinin olmaması. Engelliler şunları içerir:
- JavaDocs eksikliği. Eğer alanı javadoc edersem, alıcı ve pasör o javadocu Lombok derleme adımından devralır.
- Yöntem tanımına atla beni sınıfa atlar, ancak alıcıyı oluşturan özellik değil. Bu bir eklenti sorunudur.
- Açıkçası, yöntemi oluşturmadığınız veya kodlamadığınız sürece bir alıcı / ayarlayıcıda bir kesme noktası ayarlayamazsınız.
- NOT: Bu Referans Arama, ilk düşündüğüm gibi bir sorun değildir. Anahat görünümünü etkinleştiren bir perspektif kullanmanız gerekir. Çoğu geliştirici için sorun değil. Benim sorunum, benim
Outline
görüşümü filtreleyen Mylyn kullanıyordum , bu yüzden yöntemleri görmedim. Referans arama eksikliği. Kimin aradığını görmek getDynamicCols(args...)
istersem, referansları arayabilmek için ayarlayıcıyı oluşturmalı veya kodlamalıyım.
GÜNCELLEME 3 (Mar 7 '13)
Eclipse'de bir şeyler yapmanın çeşitli yollarını kullanmayı öğrenmek sanırım. Aslında Lombok tarafından üretilen bir yöntem üzerinde koşullu bir kesme noktası (BP) ayarlayabilirsiniz. Outline
Görünümü kullanarak yöntemi sağ tıklayabilirsiniz Toggle Method Breakpoint
. Daha sonra KB'ye bastığınızda Variables
, oluşturulan yöntemin parametreleri adlandırdığı (genellikle alan adıyla aynı) ne olduğunu görmek için hata ayıklama görünümünü kullanabilirsiniz ve son olarak, Breakpoints
BP'yi sağ tıklayıp Breakpoint Properties...
bir koşul eklemek için görünümü kullanın . Güzel.
GÜNCELLEME 4 (16 Ağustos
2013 ) Netbeans, Maven pom'unuzdaki Lombok bağımlılıklarınızı güncellediğinizde hoşlanmıyor. Proje hala derleniyor, ancak Lombok'un oluşturduğu yöntemleri göremediği için dosyalar derleme hataları nedeniyle işaretleniyor. Netbeans önbelleğini temizlemek sorunu çözer. Eclipse'de olduğu gibi bir "Projeyi Temizle" seçeneği olup olmadığından emin değilim. Küçük bir sorun, ama bunu duyurmak istedim.
GÜNCELLEME 5 (17 Ocak 14)
Lombok Groovy ile her zaman iyi oynamaz, ya da en azından groovy-eclipse-compiler
. Derleyici sürümünüzü eski sürüme geçirmeniz gerekebilir.
Maven Groovy ve Java + Lombok
GÜNCELLEME 6 (26 Haziran 14)
Bir uyarı sözü. Lombok biraz bağımlılık yapar ve bir nedenden ötürü kullanamayacağınız bir proje üzerinde çalışırsanız, işemek sizi rahatsız edecektir. Hiç kullanmamanız daha iyi olabilir.
GÜNCELLEME 7 (23 Temmuz 14)
Bu ilginç bir güncelleme, çünkü OP'nin sorduğu Lombok'u benimseme güvenliğini doğrudan ele alıyor .
Sürüm 1.1'den itibaren, @Delegate
ek açıklama Deneysel bir duruma indirgenmiştir. Detaylar kendi sitesinde belgelenmiştir ( Lombok Delege Belgeleri ).
Mesele şu ki, bu özelliği kullanıyorsanız, geri çekme seçenekleriniz sınırlıdır. Seçenekleri şöyle görüyorum:
- Manuel olarak kaldır
@Delegate
Ek açıklamaları ve temsilci kodunu oluşturun / el ile kodlayın. Ek açıklama içinde nitelikler kullanıyorsanız bu biraz daha zordur.
@Delegate
Ek açıklamaya sahip dosyaları delombok edin ve belki istediğiniz ek açıklamalara geri ekleyin.
- Lombok'u asla güncellemeyin ya da bir çatal bulundurmayın (ya da deneyimsel özellikler kullanarak yaşayın).
- Tüm projenizi delombok edin ve Lombok'u kullanmayı bırakın.
Anlayabildiğim kadarıyla Delombok'un ek açıklamaların bir alt kümesini kaldırma seçeneği yok ; en azından tek bir dosya bağlamında ya hep ya hiç. Delombok bayrakları ile bu özelliği talep etmek için bir bilet açtım , ancak yakın gelecekte bunu beklemem.
GÜNCELLEME 8 (20 Ekim 14)
Sizin için bir seçenekse Groovy, Lombok'un aynı avantajlarının çoğunu ve ayrıca @Delegate dahil olmak üzere diğer özelliklerin bir tekne yükünü sunar . Eğer bu güçlere fikrini satan zor bir zaman olacak düşünüyorsanız, bir göz atın @CompileStatic
veya @TypeChecked
o neden yardımcı olmadığını görmek için ek açıklama. Aslında, Groovy 2.0 sürümünün ana odağı statik güvenlikti .
GÜNCELLEME 9 (1 Eylül '15)
Lombok hala aktif olarak sürdürülmekte ve geliştirilmektedir ; @Builder ek açıklamalar sevdiğim yeni özelliklerden biridir.
GÜNCELLEME 10 (17 Kasım 15)
Bu doğrudan OP'nin sorusuyla ilgili değil, paylaşmaya değer görünebilir. Yazdığınız kaynak plakası miktarını azaltmanıza yardımcı olacak araçlar arıyorsanız Google Auto'ya , özellikle de AutoValue'ya da göz atabilirsiniz . Onların slayt güvertesine bakarsanız, Lombok listesi çözmeye çalıştıkları soruna olası bir çözüm olarak. Lombok için listelediği eksiler:
- Girilen kod görünmez (oluşturduğu yöntemleri "göremezsiniz") [ed note - aslında yapabilirsiniz, ancak sadece bir dekompresör gerektirir]
- Derleyici saldırıları standart ve kırılgandır
- "Bizim görüşümüze göre, kodunuz artık gerçekten Java değil"
Değerlendirmelerine ne kadar katıldığımdan emin değilim. Ve slaytlarda belgelenen AutoValue eksilerini göz önüne alındığında, ben Lombok ile yapışacağım (Groovy bir seçenek değilse).
GÜNCELLEME 11 ('16 Şubat 8)
öğrendim Bahar Roo bazılarına sahiptir benzer açıklamalarını . Roo'nun hala bir şey olduğunu öğrenmek için biraz şaşırdım ve ek açıklamalar için doküman bulmak biraz kaba. Kaldırma işlemi de-lombok kadar kolay görünmüyor. Lombok daha güvenli bir seçim gibi görünüyor.
GÜNCELLEME 12 (17 Şubat 16)
Şu anda üzerinde çalıştığım proje için Lombok'u getirmenin neden güvenli olduğuna dair gerekçeler bulmaya çalışırken, bir parça altın buldum v1.14
- Konfigürasyon Sistemi ! Bu, bir projeyi ekibinizin güvensiz veya istenmeyen bulduğu belirli özelliklerin kullanılmasına izin vermeyecek şekilde yapılandırabileceğiniz anlamına gelir. Daha da iyisi, farklı ayarlarla dizine özgü yapılandırma da oluşturabilir. Bu harika.
GÜNCELLEME 13 (4 Ekim 16)
Bu tür bir şey sizin için önemliyse , Oliver Gierke , Lombok'u Spring Data Rest'e eklemenin güvenli olduğunu düşündü .
GÜNCELLEME 14 (26 Eylül '17) OP sorusu hakkındaki yorumlarda @gavenkoa
tarafından belirtildiği gibi , JDK9 derleyici desteği henüz mevcut değil (Sayı # 985). Ayrıca Lombok ekibinin dolaşması kolay bir düzeltme olmayacak gibi görünüyor.
GÜNCELLEME 15 (
26.03.2018 ) Lombok changelog v1.16.20'den itibaren " JDK1.9'da lombok derlemek artık mümkün " ifadesini gösteriyor # 985 hala açık .
Bununla birlikte, JDK9'u barındıracak değişiklikler bazı kırılma değişikliklerini gerektirdi; tümü yapılandırma varsayılanlarındaki değişikliklerle yalıtılmıştır. Kırılma değişiklikleri getirmeleri biraz endişe verici, ancak sürüm sadece "Artımlı" sürüm numarasını çarptı (v1.16.18'den v1.16.20'ye kadar). Bu yazı güvenlikle ilgili olduğu için,yarn/npm
, otomatik olarak en son artan sürüme yükseltilen benzer bir oluşturma sisteminiz varsa, kaba bir uyanış için olabilirsiniz.
GÜNCELLEME 16 (9 Ocak 1919)
Görünüşe göre JDK9 sorunları çözüldü ve Lombok JDK10 ve hatta JDK11 ile çalışabildiğim kadarıyla çalışıyor.
Güvenlik açısından ilgili olduğunu fark ettiğim bir şey, v1.18.2'den v1.18.4'e değişen değişiklik günlüğünün iki öğeyi BREAKING CHANGE
! Bir semver "yama" güncellemesinde nasıl bir değişiklik gerçekleştiğinden emin değilim. Yama sürümlerini otomatik olarak güncelleyen bir araç kullanırsanız sorun olabilir.
javac
içsun.*
sınıflara erişimi açmak için çok fazla CLI seçeneği eklemeyi gerektirir ((