Только что начал использовать Ломбок сегодня. Пока мне это нравится, но один недостаток, о котором я не упоминал, - это поддержка рефакторинга.
Если у вас есть класс, аннотированный с помощью @Data
, он будет генерировать геттеры и сеттеры для вас на основе имен полей. Если вы используете один из этих геттеров в другом классе, тогда решите, что поле плохо названо, оно не найдет использования этих геттеров и сеттеров и заменит старое имя новым именем.
Я бы предположил, что это должно быть сделано через плагин IDE, а не через Lombok.
UPDATE (22 января '13)
После использования Ломбок в течение 3-х месяцев, я по-прежнему рекомендую для большинства проектов. Однако я нашел еще один недостаток, аналогичный приведенному выше.
Если у вас есть класс, скажу MyCompoundObject.java
, который имеет 2 участника, и с аннотацией @Delegate
, скажет myWidgets
и myGadgets
, когда вы звоните myCompoundObject.getThingies()
из другого класса, это невозможно знать, если это делегирование к Widget
или Gadget
, потому что вы можете больше не переходите к источнику в среде IDE.
Использование Eclipse «Создание методов делегатов ...» предоставляет вам ту же функциональность, так же быстро и обеспечивает переключение источника. Недостатком является то, что он загромождает ваш источник кодом шаблона, который фокусирует внимание на важном материале.
UPDATE 2 (26 февраля '13)
Через 5 месяцев, мы все еще используем Ломбок, но у меня есть некоторые другие раздражающие. Отсутствие объявленного getter & setter может раздражать время от времени, когда вы пытаетесь ознакомиться с новым кодом.
Например, если я вижу метод под названием getDynamicCols()
, но я не знаю, о чем речь, у меня есть некоторые дополнительные препятствия, чтобы перейти к определению цели этого метода. Некоторые из препятствий - Ломбок, некоторые из них - отсутствие плагина Lombok smart. Препятствия включают:
- Отсутствие JavaDocs. Если я javadoc поля, я надеюсь, что геттер и сеттер наследуют этот javadoc через шаг компиляции Lombok.
- Перейти к определению метода переводит меня в класс, но не свойство, которое сгенерировало геттер. Это проблема с плагином.
- Очевидно, что вы не можете установить контрольную точку в геттер/сеттер, если вы не создадите или не закодируете метод.
- ПРИМЕЧАНИЕ. Этот справочный поиск не является проблемой, поскольку я впервые подумал, что это так. Вам нужно использовать перспективу, которая позволяет просматривать схему. Не проблема для большинства разработчиков. Моя проблема в том, что я использую Mylyn, который фильтрует мой вид
Outline
, поэтому я не видел методов. Отсутствие поиска ссылок. Если я хочу видеть, кто звонит getDynamicCols(args...)
, мне нужно сгенерировать или закодировать установщик, чтобы иметь возможность искать ссылки.
UPDATE 3 (7 марта '13)
Научиться использовать различные способы работы в Eclipse, я думаю. Фактически вы можете установить условную точку останова (BP) в методе, сгенерированном Ломбоком. Используя вид Outline
, вы можете щелкнуть правой кнопкой мыши метод до Toggle Method Breakpoint
. Затем, когда вы нажмете BP, вы можете использовать отладку Variables
, чтобы увидеть, как сгенерированный метод назвал параметры (как правило, такие же, как имя поля), и, наконец, используйте вид Breakpoints
, чтобы щелкнуть правой кнопкой мыши BP и выбрать Breakpoint Properties...
, чтобы добавить состояние. Ницца.
UPDATE 4 (Aug 16 '13)
Netbeans не нравится, когда вы обновите зависимости Ломбок в вашем Maven ПОМ.Проект все еще компилируется, но файлы получают помечены за ошибки компиляции, потому что они не могут видеть методы, созданные Lombok. Очистка кеша Netbeans устраняет проблему. Не уверен, есть ли опция «Чистый проект», как в Eclipse. Незначительная проблема, но хотел сообщить об этом.
UPDATE 5 (Jan 17 '14)
Ломбок не всегда играет хорошо с Groovy, или по крайней мере groovy-eclipse-compiler
. Возможно, вам придется отказаться от версии вашей компиляции. Maven Groovy and Java + Lombok
UPDATE 6 (26 июня '14)
Слово предупреждения. Ломбок немного затягивает, и если вы работаете над проектом, в котором вы не можете его использовать по какой-то причине, это будет раздражать вас. Возможно, вам лучше не использовать его вообще.
UPDATE 7 (23 июля '14)
Это немного интересного обновления, поскольку он непосредственно обращается к безопасности принятия Ломбок, что ОП спросил о.
Начиная с версии 1.1, аннотация @Delegate
была понижена до уровня эксперимента. Подробности задокументированы на их сайте (Lombok Delegate Docs).
Дело в том, что если вы использовали эту функцию, ваши варианты резервного копирования ограничены. Я вижу варианты как:
- Вручную удалять
@Delegate
аннотации и генерировать/указывать код делегата. Это немного сложнее, если вы использовали атрибуты в аннотации.
- Delombok файлы, которые содержат аннотацию
@Delegate
и, возможно, добавляются в аннотации, которые вы хотите.
- Никогда не обновляйте Ломбок или не держите вилку.
- Delombok весь проект и прекратите использовать Ломбок.
Насколько я могу судить, Delombok doesn't have an option to remove a subset of annotations; это все или ничего, по крайней мере, для контекста одного файла. Я открыл a ticket to request this feature с флагами Delombok, но я не ожидал этого в ближайшем будущем.
UPDATE 8 (20 октября '14)
Если это вариант для вас, Groovy предлагает те же самые преимущества Ломбок, плюс нагрузка лодки других функций, в том числе @Delegate. Если вы считаете, что вам нелегко продать идею тем, кто будет, взгляните на аннотацию @CompileStatic
или @TypeChecked
, чтобы узнать, поможет ли это вам. Фактически, the primary focus of the Groovy 2.0 release was static safety.
ОБНОВЛЕНИЕ 9 (1 сентября '15)
Ломбок все еще actively maintained and enhanced, что хорошо предвещает на уровень безопасности принятия. Аннотации @Builder - одна из моих любимых новых функций.
UPDATE 10 (Ноябрь 17 '15)
Это может показаться не напрямую связаны с вопросом Ор, но стоит поделиться.Если вы ищете инструменты, которые помогут вам уменьшить количество кода шаблона, который вы пишете, вы также можете проверить Google Auto - в частности AutoValue. Если вы посмотрите на их slide deck, список Lombok станет возможным решением проблемы, которую они пытаются решить. Зэки они перечисляют на Ломбок являются:
- Введенный код невидим (вы не можете «видеть» методы он генерирует) [примечание редактора - на самом деле вы можете, но это просто требует декомпилятор]
- хаки компилятора являются нестандартными и хрупкая
- «На наш взгляд, ваш код больше не действительно Java»
Я не уверен, насколько я согласен с их оценкой. И учитывая недостатки AutoValue, которые задокументированы в слайдах, я буду придерживаться Lombok (если Groovy не вариант).
UPDATE 11 (8 февраля '16)
я узнал Spring Roo имеет некоторые similar annotations. Я был немного удивлен, узнав, что Роо все еще есть, и найти документацию для аннотаций немного грубо. Удаление также выглядит не так просто, как де-ломбок. Ломбок кажется более безопасным выбором.
UPDATE 12 (Feb 17 '16)
При попытке придумать оправдания, почему это безопасно, чтобы принести в Ломбках для проекта я сейчас работаю, я нашел кусок золота, который был добавлен с v1.14
- Configuration System! Это означает, что вы можете настроить проект, чтобы запретить определенные функции, которые ваша команда считает небезопасными или нежелательными. Еще лучше, он также может создавать конфигурацию с конкретным каталогом с различными настройками. Это круто.
UPDATE 13 (4 октября '16)
Если такая вещь имеет значение для вас, Oliver Gierke чувствовал, что это было безопасно add Lombok to Spring Data Rest.
UPDATE 14 (Sep 26 '17)
Как отметил @gavenkoa в комментариях по OPS вопросу, JDK9 compiler support isn't yet available. Похоже, что это не будет легким решением для команды Ломбок, чтобы обойти.
[Добавить поддержку компилятора jdk9 # 985] (https://github.com/rzwitserloot/lombok/issues/985) не разрешено в момент моего комментария. Пакетная система Java 9 требует добавления большого количества опций CLI к 'javac', чтобы открыть доступ к внутренним классам' sun. * '(( – gavenkoa