Щойно почав використовувати Lombok сьогодні. Поки мені це подобається, але один недолік, якого я не бачив, це підтримка рефакторингу.
Якщо у вас є анотація класу @Data
, він генерує для вас getters та setters на основі назв полів. Якщо ви використовуєте один з цих гетерів в іншому класі, то вирішите, що поле названо погано, воно не знайде звичаї цих геттерів та сеттерів та замінить стару назву новою назвою.
Я думаю, що це потрібно робити через плагін IDE, а не через Lombok.
ОНОВЛЕННЯ (22 січня 1313 р.)
Після використання Lombok протягом 3 місяців я все ж рекомендую його для більшості проектів. Однак я знайшов ще один недолік, подібний до перерахованого вище.
Якщо у вас є клас, скажіть, MyCompoundObject.java
що у нього є 2 члени, на яких позначено повідомлення @Delegate
, скажімо, myWidgets
і myGadgets
, коли ви телефонуєте myCompoundObject.getThingies()
з іншого класу, неможливо дізнатися, чи він делегується до Widget
або Gadget
тому, що ви більше не можете переходити до джерела в IDE.
Використання Eclipse "Створення методів делегації ..." надає вам таку ж функціональність, так само швидко і забезпечує стрибки з джерела. Мінус полягає в тому, що він захаращує ваш джерело кодовою табличкою, яка знімає фокус важливих речей.
ОНОВЛЕННЯ 2 (26 лютого 1313 р.)
Через 5 місяців ми все ще використовуємо Ломбок, але у мене є деякі інші прикрості. Відсутність заявленого геттера та сеттера може набриднути, коли ви намагаєтесь ознайомитись з новим кодом.
Наприклад, якщо я бачу метод, який називається, getDynamicCols()
але я не знаю, про що йдеться, у мене є кілька додаткових перешкод, щоб стрибнути, щоб визначити мету цього методу. Деякі з перешкод - це Lombok, деякі - відсутність розумного плагіна Lombok. Перешкоди включають:
- Відсутність JavaDocs. Якби я поширював поле, я сподіваюся, що геттер і сетер успадкують цей Javaдок через крок компіляції Ломбока.
- Перейти до визначення методу переходить мене до класу, але не до властивості, яка генерувала гетьтер. Це проблема із плагінами.
- Очевидно, ви не в змозі встановити точку розриву в геттере / сеттері, якщо не створити або кодувати метод.
- ПРИМІТКА. Цей довідковий пошук не є проблемою, як я вперше вважав, що це. Вам потрібно використовувати перспективу, яка дозволяє переглядати контур. Не є проблемою для більшості розробників. Моя проблема полягала в тому, що я використовую Mylyn, яка фільтрувала мій
Outline
погляд, тому я не бачив методів. Відсутність пошуку літератури. Якщо я хочу побачити, хто дзвонить getDynamicCols(args...)
, мені доведеться генерувати або кодувати сеттер, щоб мати змогу шукати посилання.
ОНОВЛЕННЯ 3 (7 березня 1313 р.)
Навчаюсь використовувати різні способи ведення справ у Eclipse. Ви можете фактично встановити умовну точку розриву (ВР) методом, створеним у Ломбоку. ВикористанняOutline
представлення даних, ви можете клацнути правою кнопкою миші метод до Toggle Method Breakpoint
. Потім, натиснувши ВР, ви можете скористатися Variables
поданням налагодження, щоб побачити, який згенерований метод назвав параметри (як правило, такі самі, як назва поля) і, нарешті, скористатися Breakpoints
поданням, щоб клацнути правою кнопкою миші ВР та вибрати, Breakpoint Properties...
щоб додати умову. Приємно.
ОНОВЛЕННЯ 4 (16 серпня 1313)
Netbeans не сподобається, коли ви оновлюєте свої залежності від Lombok у своєму Maven pom. Проект все ще компілюється, але файли позначаються за помилки компіляції, оскільки він не може бачити методи створення Lombok. Очищення кеша Netbeans вирішує проблему. Не впевнений, чи є варіант "Очистити проект", як у Eclipse. Незначна проблема, але хотіла дати їй знати.
ОНОВЛЕННЯ 5 (17 січня '14)
Ломбок не завжди грає добре з Groovy, або принаймні тим groovy-eclipse-compiler
. Можливо, вам доведеться знизити версію компілятора.
Maven Groovy та Java + Lombok
ОНОВЛЕННЯ 6 (26 червня '14)
Слово попередження. Ломбок трохи викликає звикання, і якщо ви працюєте над проектом, де ви з якихось причин не можете його використати, це буде дратувати мотанку у вас. Вам може бути краще просто ніколи не користуватися ним.
ОНОВЛЕННЯ 7 (23 липня '14)
Це трохи цікаве оновлення, оскільки воно безпосередньо стосується безпеки прийняття Ломбока, про яку попросила ОП.
Станом на v1.14, @Delegate
примітка переведена на статус експерименту. Деталі задокументовані на їхньому сайті ( Документи Lombok Delegate ).
Вся справа в тому, що якщо ви використовували цю функцію, ваші варіанти резервного копіювання обмежені. Я бачу варіанти як:
- Видаліть вручну
@Delegate
примітки та генеруйте / передайте вручну код делегатного коду. Це трохи складніше, якщо ви використовували атрибути в примітці.
- Розгорніть файли, які містять
@Delegate
примітку, і, можливо, додайте їх до потрібних приміток.
- Ніколи не оновлюйте Lombok і не підтримуйте розвилку (або в прямому ефірі з використанням досвідчених функцій).
- Делобок весь ваш проект і припиніть використовувати Lombok.
Наскільки я можу сказати, Delombok не має можливості видалити підмножину анотацій ; це все або нічого, принаймні, для контексту одного файлу. Я відкрив квиток, щоб запросити цю функцію зі прапорами Delombok, але я не очікував цього найближчим часом.
ОНОВЛЕННЯ 8 (20 жовтня '14)
Якщо це варіант для вас, Groovy пропонує більшість таких самих переваг, як Lombok, плюс навантаження на човен інших функцій, включаючи @Delegate . Якщо ви думаєте, що вам буде важко продати ідею повноваженням, перегляньте @CompileStatic
або @TypeChecked
примітку, щоб побачити, чи може це допомогти вашій справі. Насправді основним напрямком випуску Groovy 2.0 була статична безпека .
ОНОВЛЕННЯ 9 (1 вересня 15 р.)
Ломбок все ще активно підтримується та вдосконалюється , що відповідає рівню безпеки. @Builder анотації один з моїх улюблених нових можливостей.
ОНОВЛЕННЯ 10 (17 листопада '15)
Це може здатися не безпосередньо пов’язаним із питанням ОП, але варто їх поділитися. Якщо ви шукаєте інструменти, які допоможуть вам зменшити кількість написаного вами коду, ви також можете перевірити Google Auto - зокрема AutoValue . Якщо ви подивитеся на їх слайд-колоду , перелічіть Lombok як можливе рішення проблеми, яку вони намагаються вирішити. Мінуси, які вони перераховують для Ломбока:
- Вставний код невидимий (ви не можете "бачити" методів, які він генерує) [ed примітка - насправді ви можете, але для цього просто потрібен декомпілятор]
- Хаки для компілятора нестандартні та крихкі
- "На наш погляд, ваш код уже не справді Java"
Я не впевнений, наскільки я згоден з їх оцінкою. І з огляду на мінуси AutoValue, які зафіксовані на слайдах, я буду дотримуватися Lombok (якщо Groovy не є варіантом).
ОНОВЛЕННЯ 11 (8 лютого 1616 р.)
Я дізнався, що Spring Roo має кілька подібних приміток . Я трохи здивувався, дізнавшись, що Роо все ще є річчю, і пошук документації для анотацій є дещо грубою. Видалення також виглядає не так просто, як de-lombok. Ломбок здається більш безпечним вибором.
ОНОВЛЕННЯ 12 (17 лютого 1616 р.)
Під час спроби придумати виправдання, чому можна безпечно привезти в Ломбок проект, над яким я зараз працюю, я знайшов золоту частину, яку додали v1.14
- Конфігураційна система ! Це означає, що ви можете налаштувати проект так, щоб заборонити певні функції, які ваша команда вважає небезпечними або небажаними. Що ще краще, він також може створити конфігурацію конкретного каталогу, що має різні налаштування. Це круто.
ОНОВЛЕННЯ 13 (4 жовтня 1616 р.)
Якщо подібні речі для вас важливі, Олівер Дьерке вважав, що безпечно додати Ломбок до весняного відпочинку .
ОНОВЛЕННЯ 14 (26 вересня 1717 р.)
Як вказувало @gavenkoa в коментарях до питання про оперативні програми, підтримка компілятора JDK9 ще не доступна (випуск № 985). Це також звучить так, що команда Ломбок не зможе легко виправити цю проблему.
ОНОВЛЕННЯ 15 (26 березня 18 р.)
Блог змін у Lombok вказує станом на v1.16.20 " Компіляція lombok на JDK1.9 тепер можлива ", хоча # 985 все ще відкритий.
Однак зміни, що стосуються розміщення JDK9, потребували певних змін; всі ізольовані для зміни параметрів конфігурації. Це трохи стосується того, що вони внесли неполадки в зміни, але версія лише зіткнулася з "Поступовим" номером версії (від v1.16.18 до v1.16.20). Оскільки ця публікація стосувалася безпеки, якщо у вас була система yarn/npm
схожої збірки, яка автоматично оновилася до останньої інкрементальної версії, можливо, ви будете за грубе пробудження.
ОНОВЛЕННЯ 16 (9 січня 1919)
Здається, проблеми з JDK9 були вирішені, і Lombok працює з JDK10, і навіть JDK11, наскільки я можу сказати.
Одне, що я помітив, хоча це стосувалося аспекту безпеки, це те, що журнал змін, що переходить від v1.18.2 до v1.18.4, перераховує два елементи як BREAKING CHANGE
!? Я не впевнений, як зламлива зміна відбувається в оновлення "patch" semver. Може виникнути проблема, якщо ви використовуєте інструмент, який автоматично оновлює версії патчів.
javac
того, щоб відкрити доступ до внутрішніхsun.*
класів ((