Все знают, как писать POJO (Простые старые Java-объекты). Более того, наши современные IDE справляются с этой повторяющейся и не очень полезной работой, генерируя шаблонный код, такой как средства доступа, конструкторы и часто переопределяемые методы, такие как toString, equals или hashCode. Кстати, какой разработчик может сказать, что у него никогда не было долгих дебатов со своей командой о том, как написать удовлетворяющий метод equals или hashCode, который никогда не получал уведомления от своего инструмента статического анализа кода о несоответствии между полями, используемыми в реализации этих методов? Цель проекта Lombok – облегчить жизнь разработчикам, выполнив эту грязную работу и очистив POJOs от всего этого шаблонного кода, который не имеет большой ценности и, что более важно, теряет важную информацию, бизнес-код, в середине технических слоев. Как это работает в двух словах: Lombok интегрируется с вашей любимой IDE и автоматически сгенерирует этот код, не показывая его вам. Вы увидите только определение полей, хотя все вспомогательные и “служебные” методы будут доступны. Это волшебство выполняется с помощью одной или нескольких аннотаций. Мы также поговорим о некоторых других повторяющихся и/или подробных задачах, с которыми Ломбок может справиться за нас.
Давайте начнем!
Установка Lombok проста. Вы можете либо загрузить его самоисполняемый jar на официальном сайте и запустить его, либо установить его плагин в свою IDEA (я лично использую IntelliJ, поэтому я использовал это решение), затем добавить lombok.jar к пути к классу вашего Java-проекта. Если вы используете Maven для обработки вашей сборки и зависимостей, добавьте следующую зависимость в свой pom.xml: <зависимость> |/<идентификатор группы>org.projectlombok<|Идентификатор группы>/| ломбок
<версия>1.16.8
<область действия>предоставлено действия>
действия>
Как только мы будем готовы к работе, давайте создадим простое POJO:
Как и ожидалось, компилятор не очень доволен нашим кодом… Давайте просто добавим аннотацию Lombok @Data к нашему определению класса:
Проблема решена! Но что действительно интересно, так это то, что наш POJO теперь может предложить гораздо больше:
Мы можем быстро проверить результаты:
Теперь у нас есть довольно удобочитаемый метод toString без необходимости писать несколько строк кода!
Особые потребности
Это был более простой вариант использования Lombok, но я уверен, что некоторые из вас думают, что он немного ограничен и что он не будет работать в ваших особых случаях. Не бойся! Lombok позволяет вам настраивать все, что он генерирует. Вместо того, чтобы использовать @Data для генерации всего кода, Lombok предоставляет аннотации для каждой из своих функций. Например, если мы хотим предоставить средства доступа только для некоторых полей или с определенной видимостью, мы можем добиться этого, используя аннотации @Getter и @Setter и их параметры для желаемых атрибутов.
Что касается функций, которые мы видели ранее, мы можем аннотировать класс для генерации методов toString, equals и hashCode, и для каждого метода мы можем указать атрибуты для включения или исключения для генерации кода:
Мы также можем сгенерировать частный конструктор и связанную с ним фабрику:
Еще одна интересная аннотация, предоставленная Ломбоком, – @NonNull. Это позволяет автоматически проверять, что параметр установщика или конструктора не равен null, и в противном случае выдавать исключение:
Важно, чтобы все было просто!
Ломбок также содержит больше аннотаций, но я нахожу их менее интересными. Например, @CleanUp позволяет автоматически вызывать метод close переменной, определенной внутри блока try/catch. Это может быть полезно для тех, кто все еще использует Java 6 и не может воспользоваться преимуществами использования ресурсов, представленных в JDK 7. Аннотация @Synchronized позволяет определять блокировки. Лично я предпочитаю определять блокировки с помощью стандартного ключевого слова synchronized, которое знает каждый разработчик Java. Последняя аннотация, о которой я хочу поговорить, самая сложная: @SneakyThrows позволяет создавать непроверенное исключение внутри тела метода, не указывая его внутри сигнатуры метода. Он может маскировать потенциальные ошибки для разработчика и поэтому может быть очень подвержен ошибкам, я не рекомендую его использовать.
Заключительные мысли
В заключение, я думаю, что Lombok – интересный инструмент для упрощения написания POJO. Это не убийственный инструмент, но наличие меньшего количества шаблонного кода для поддержки – это хорошо для меня, это помогает сделать бизнес-информацию более заметной. Технические аннотации Ломбока, по моему мнению, менее интересны, и они даже могут быть довольно опасными с моей точки зрения. Несмотря на эти несколько недостатков, я готов попробовать Ломбок в своих личных проектах.
Вы можете найти фрагменты кода этой статьи в моем репозитории my Github
Оригинал: “https://dev.to/schreiber_chris/simplifying-our-pojos-with-lombok”