- Android pojo что это
- Как их создать и как с ними работать? #
- Использование на практике #
- Cериализация #
- Десериализация #
- Полезные библиотеки #
- Что такое класс POJO?
- 1. Обзор
- 2. Простые Старые объекты Java
- 2.1. Что такое POJO?
- 2.2. Отражение с помощью POJO
- 3. JavaBeans
- 3.1. Что такое JavaBean?
- 3.2. EmployeePojo как JavaBean
- 3.3. Отражение с помощью JavaBean
- 4. Компромиссы При Использовании JavaBeans
- 5. Заключение
- Классы poji, pojo и Java Beans в Java
- POJI в Java
- Пример 1
- Пример 2
- POJO против Java Beans в Java
- Пример класса Java Bean
- Пример класса POJO
- Lombok возвращает величие Java
- Настройка Lombok
- Lombok в действии
- Оживить объект POJO
- Удаление шаблонного кода
- Но подождите, это ещё не всё!
- Сравнение бок о бок
- Оценка эффекта
- Резюме
Android pojo что это
POJO – это plain old Java object, простой Java-объект, не ограниченный какими-либо запретами, специфичными для того или иного фреймворка (за исключением спецификации самой Java, разумеется) и пригодный для использования в любой среде.
POJO используются для универсальной и наглядной сериализации и десериализации данных, так что основное их назначение в тестировании с RestAssured – это обработка Json в теле запросов и ответов.
Они позволяют достаточно гибко настраивать содержимое Json-объектов, отправляемых в теле запросов – например можно использовать один POJO-класс для составления Json-объектов с разным набором значений, избежав при этом многократного повторения одного и того же кода, или легко создавать Json-объекты с многоуровневыми вложениями, сохраняя при этом простую и наглядную структуру.
При обработке входящих ответов POJO позволяют извлекать любые необходимые значения для дальнейшего использования, а также дают (как уже было сказано выше – простой и наглядный) доступ к вложенным значениям.
Как их создать и как с ними работать? #
POJO — это публичный класс, все переменные в котором закрыты, а взаимодействие с ними происходит через сеттеры и геттеры. Также у POJO должен быть дефолтный конструктор, определяющий необходимый набор параметров для любого экземпляра этого класса. Соответственно, в самом базовом варианте POJO будет иметь следующий вид:
Конструктор, как и любой другой метод, можно перегружать. Таким образом можно определить несколько допустимых наборов параметров при создании экземпляра класса. Например, следующие конструкторы позволят создать только книгу без названия и автора или книгу с названием и автором, но не с чем-то одним:
Впрочем, ничто не мешает нам создать книгу пустым конструктором, а затем назначить ей только один параметр с помощью сеттера.
Создание экземпляра класса Book происходит следующим образом:
Использование на практике #
Для демонстрации работы POJO будет использован API Restful Booker, с его документацией можно ознакомиться здесь: https://restful-booker.herokuapp.com/apidoc/index.html
И в исходящих запросах, и во входящих ответах в этом API используется json-объект следующего вида:
Для того чтобы описать этот json, нам нужно создать класс Booking, в котором мы объявим все необходимые переменные, таким же образом, как в приведенном выше примере.
Вы можете заметить, что поле bookingdates содержит в себе два вложенных значения, и у нас нет готового типа данных, который можно было бы присвоить соответствующей ему переменной. Это проблема решается крайне просто: нам всего лишь необходимо создать класс BookingDates:
Теперь у нас есть тип данных, подходящий для поля bookingdates, так что у нас есть все необходимое, чтобы создать класс Booking.
Точно таким же образом можно описывать и более сложные многоуровневые вложения.
Так как все переменные в обоих классах приватные, а нам понадобится доступ к хранящимся в них значениям, напишем для каждой из них Getter:
На этом подготовка POJO заканчивается, и мы можем переходить непосредственно к сериализации и десериализации.
Cериализация #
В качестве примера сериализации с помощью POJO мы сформируем json-объект, который необходимо отправить в POST-запросе на эндпойнт /booking для создания новой брони.
Для этого создадим экземпляры классов Booking и BookingDates со всеми необходимыми для формирования Json-объекта данными:
Rest Assured прекрасно умеет преобразовывать POJO в Json, так что никаких дополнительных манипуляций над созданным объектом нам не потребуется. Все, что нужно сделать после этого – поместить созданный объект booking в тело нашего запроса:
Таким образом мы отправляем запрос со следующим содержанием:
Десериализация #
Для изучения работы десериализации с помощью POJO мы создадим такую же бронь, как до этого, десериализуем ответ от API, извлечем значение bookingid, а затем запросим данные о брони с этим bookingid и сравним из с отправленным json-объектом.
Для начала посмотрим на то, как выглядит ответ на отправленный нами запрос о создании новой брони:
Как мы видим, структура json стала чуть сложнее и к ней добавился еще один уровень. По аналогии с предыдущими классами, создадим класс BookingInfo:
Также добавляем в уже существующие классы пустые конструкторы:
Теперь мы можем сохранить ответ на POST-запрос в переменную, одновременно с этим десериализовав его:
Как видите, процесс десериализации практически идентичен сериализации – Rest Assured можно преобразовать Json в POJO без каких-либо дополнительных действий и библиотек.
Теперь у нас есть экземпляр класса BookingInfo, который содержит в себе всю полученную информацию. Чтобы проверить, что данные действительно сохранились, используем полученный bookingid, чтобы получить информацию о созданной нами брони:
В ответе мы получили верные данные, но чтобы не полагаться на визуальную проверку, сравним полученный Json с тем, который мы создали при формировании POST-запроса.
Самый простой способ это сделать – это привести POJO к строке. Для этого перепишем метод toString() в Booking и BookingDates следующим образом:
А затем сравним полученные строки:
Полезные библиотеки #
- Аннотации @Getter и @Setter из библиотеки Lombok
Геттеры и сеттеры занимают довольно много места – особенно в POJO с большим количеством переменных, – не привнося с собой никакой полезной информации. Библиотека Lombok позволяет заменить методы для геттеров и сеттеров аннотацией.
@JsonInclude #
Аннотация JsonInclude позволяет управлять тем, какие параметры будут добавлены или исключены из итогового json-объекта. Она может применяться как ко всему классу, так и к отдельным переменным, и может принимать значения ALWAYS (всегда включать), NON_NULL (исключить параметры равные null), NON_EMPTY (исключить null, а так же пустые списки/массивы), * NON_DEFAULT/USE_DEFAULTS* (не использовать/использовать значения по умолчанию), *CUSTOM* (использовать кастомный фильтр) .
Например, аннотация @JsonInclude(JsonInclude.Include.NON_NULL) для всего POJO позволяет использовать один класс для нескольких вариантов json-схем. Для этого нужно просто передать null в тех параметрах, которые не нужны для конкретной схемы, и они будут исключены из финального json.
@JsonProperty #
Аннотация @JsonProperty позволяет указать, к какому параметру относится геттер или сеттер в том случае, когда по какой-то причине необходимо использовать метод с нестандартным именем:
@JsonAlias #
@JsonAlias позволяет сохранять параметры с разными вариантами написания в одну переменную.
В данном случае в переменную firstname может быть записано значение с любым из трех указанных выше ключей: firstname, firstName и name.
Аннотация @JsonAlias отлично помогает справляться с не консистентными json-схемами, в которых одни и те же значения записаны под разными ключами.
@JsonIgnoreProperties и @JsonIgnore #
Обе эти аннотации указывают на переменные, которые должны быть проигнорированы при сериализации или десериализации.
@JsonIgnoreProperties используется для всего класса:
@JsonIgnore используется над переменной, которую необходимо исключить:
- Package org.hamcrest.beans из библиотеки Hamcrest
hasProperty #
Метод hasProperty() позволяет проверить, есть ли в экземпляре класса указанный параметр:
samePropertyValuesAs #
Метод samePropertyValuesAs() позволяет сравнить два экземпляра одного или разных классов.
Однако стоит отметить, что этот метод корректно работает только с простыми POJO без вложенных классов.
Увидел(а) ошибку в тексте? Нет нужной информации или она не полная?
Скорей же исправь данный недочет и облегчи жизнь себе и своей команде!
Обязательно ознакомься с тем как заполнить bugаж знаний и после создавай МР в проекте bugаж знаний на своего QA Team Lead.
Источник
Что такое класс POJO?
Знание разницы между POJO и JavaBean может быть ключом к раскрытию потенциала наших классов в ядре Java.
Автор: baeldung
Дата записи
1. Обзор
В этом коротком уроке мы рассмотрим определение “Простого старого объекта Java” или POJO для краткости.
Мы рассмотрим, как POJO сравнивается с JavaBean, и как превращение наших POJO в JavaBean может быть полезным.
2. Простые Старые объекты Java
2.1. Что такое POJO?
Когда мы говорим о POJO, то описываем простой тип без ссылок на какие-либо конкретные фреймворки. У POJO нет соглашения об именовании для наших свойств и методов.
Давайте создадим базовое POJO для сотрудников. У него будет три свойства: имя, фамилия и дата начала:
Этот класс может использоваться любой программой Java, так как он не привязан ни к какому фреймворку.
Но мы не следуем какому-либо реальному соглашению для построения, доступа или изменения состояния класса.
Это отсутствие соглашения вызывает две проблемы:
Во-первых, это увеличивает кривую обучения для программистов, пытающихся понять, как ее использовать.
Во-вторых, это может ограничить способность фреймворка отдавать предпочтение соглашению перед конфигурацией, понимать, как использовать класс, и расширять его функциональность.
Чтобы изучить этот второй момент, давайте поработаем с Employee Pojo , используя отражение. Таким образом, мы начнем находить некоторые из его ограничений.
2.2. Отражение с помощью POJO
А теперь давайте проверим свойства нашего POJO:
Если бы мы распечатали имена свойств на консоли, мы бы увидели только:
Здесь мы видим, что мы получаем start только как свойство класса. PropertyUtils не удалось найти два других.
Мы бы увидели такой же результат, если бы использовали другие библиотеки, такие как Jackson для обработки Employee Pojo.
В идеале мы бы увидели все наши свойства: Имя , Фамилия, и Дата начала. И хорошая новость заключается в том, что многие библиотеки Java по умолчанию поддерживают то, что называется соглашением об именах JavaBean.
3. JavaBeans
3.1. Что такое JavaBean?
JavaBean по-прежнему является POJO, но вводит строгий набор правил относительно того, как мы его реализуем:
- Уровни доступа – наши свойства являются частными, и мы предоставляем геттеры и сеттеры
- Имена методов – наши геттеры и сеттеры следуют соглашению getX и setX (в случае логического значения isX может использоваться для геттера)
- Конструктор по умолчанию – конструктор без аргументов должен присутствовать, чтобы экземпляр можно было создать без предоставления аргументов, например, во время десериализации
- Сериализуемый – реализация интерфейса Serializable позволяет нам хранить состояние
3.2. EmployeePojo как JavaBean
Итак, давайте попробуем преобразовать Employee Pojo в JavaBean:
3.3. Отражение с помощью JavaBean
Когда мы проверяем наш боб с отражением, теперь мы получаем полный список свойств:
4. Компромиссы При Использовании JavaBeans
Итак, мы показали способ, с помощью которого JavaBeans полезны. Имейте в виду, что каждый выбор дизайна сопровождается компромиссами.
Когда мы используем JavaBeans, мы также должны помнить о некоторых потенциальных недостатках:
- Изменчивость – наши JavaBeans изменчивы из – за их методов настройки-это может привести к проблемам параллелизма или согласованности
- Шаблон – мы должны ввести геттеры для всех свойств и сеттеры для большинства, многое из этого может быть ненужным
- Конструктор с нулевым аргументом – нам часто нужны аргументы в наших конструкторах, чтобы гарантировать, что объект будет создан в допустимом состоянии, но стандарт JavaBean требует, чтобы мы предоставили конструктор с нулевым аргументом
Учитывая эти компромиссы, фреймворки также адаптировались к другим конвенциям bean на протяжении многих лет.
5. Заключение
В этом уроке мы сравнили POJOs с JavaBeans.
Во-первых, мы узнали, что POJO-это объект Java, который не привязан к какой-либо конкретной структуре, и что JavaBean-это особый тип POJO со строгим набором соглашений.
Затем мы увидели, как некоторые фреймворки и библиотеки используют соглашение об именовании JavaBean для обнаружения свойств класса.
Источник
Классы poji, pojo и Java Beans в Java
POJI в Java
Является аббревиатурой от Plain Old Java Interface, который соответствует стандартному интерфейсу Java, что означает, что эти интерфейсы находятся в контексте предоставления услуг в JEE. Например, услуга OSGI предлагается через POJI в JEE
Другими словами, мы можем сказать, что POJI – это обычный интерфейс без какой-либо специальности, которая не унаследована от какого-либо специального API-интерфейса технологии или интерфейсов платформы.
Пример 1
Оба интерфейса будут называться POJI, поскольку они не наследуют какой-либо технологический интерфейс.
Пример 2
Оба интерфейса не будут называться POJI, поскольку они наследуют специфический для технологии интерфейс.
POJO против Java Beans в Java
Как мы знаем, в Java POJO ссылается на простой старый объект Java. POJO и класс Bean в Java имеют некоторые общие черты, а именно:
- Оба класса должны быть общедоступными, т.е. доступными для всех.
- Свойства или переменные, определенные в обоих классах, должны быть закрытыми, то есть не могут быть доступны напрямую.
- Оба класса должны иметь конструктор по умолчанию, т.е. не иметь аргумента конструктора.
- Public Getter и Setter должны присутствовать в обоих классах для доступа к переменным / свойствам.
Единственное различие между обоими классами состоит в том, что Java делает объекты Java-бинов сериализованными, чтобы в случае необходимости можно было сохранить состояние класса бинов. Поэтому из-за этого класс Java-бинов должен реализовывать интерфейс Serializable или Externalizable.
В связи с этим указывается, что все JavaBean-компоненты являются POJO, но не все POJO-объекты являются JavaBean-компонентами.
Пример класса Java Bean
Пример класса POJO
Средняя оценка / 5. Количество голосов:
Спасибо, помогите другим — напишите комментарий, добавьте информации к статье.
Или поделись статьей
Видим, что вы не нашли ответ на свой вопрос.
Источник
Lombok возвращает величие Java
Мы в Grubhub почти во всём бэкенде используем Java. Это проверенный язык, который за последние 20 лет доказал свою скорость и надёжность. Но с годами возраст «старичка» всё-таки начал сказываться.
Java — один из самых популярных языков JVM, но не единственный. В последние годы конкуренцию ему составляют Scala, Clojure и Kotlin, которые обеспечивают новую функциональность и оптимизированные функции языка. Короче говоря, они позволяют делать больше с более лаконичным кодом.
Эти инновации в экосистеме JVM очень интересные. Из-за конкуренции Java вынуждена меняться, чтобы сохранить конкурентоспособность. Новый шестимесячный график выпуска и несколько JEP (JDK enhancement proposals) в Java 8 (Valhalla, local-Variable Type Inference, Loom) — доказательство того, что Java долгие годы останется конкурентоспособным языком.
Тем не менее, размер и масштаб Java означают, что разработка продвигается медленнее, чем мы хотели бы, не говоря уже о сильном желании любой ценой поддерживать обратную совместимость. В любой разработке первым приоритетом должны быть функции, однако здесь необходимые функции слишком долго разрабатываются, если вообще попадают в язык. Поэтому мы в Grubhub используем Project Lombok, чтобы прямо сейчас иметь в своём распоряжении оптимизированную и улучшенную Java. Проект Lombok — это плагин компилятора, который добавляет в Java новые «ключевые слова» и превращает аннотации в Java-код, уменьшая усилия на разработку и обеспечивая некоторую дополнительную функциональность.
Настройка Lombok
Grubhub всегда стремится улучшить жизненный цикл программного обеспечения, но каждый новый инструмент и процесс имеет стоимость, которую следует учесть. К счастью, для подключения Lombok достаточно добавить всего пару строк в файл gradle.
Lombok преобразует аннотации в исходном коде в Java-операторы до того, как компилятор их обработает: зависимость lombok отсутствует в рантайме, поэтому использование плагина не увеличит размер сборки. Чтобы настроить Lombok с Gradle (он также работает с Maven), просто добавьте в файл build.gradle такие строки:
При использовании Lombok наш исходный код не будет валидным кодом Java. Поэтому потребуется установить плагин для IDE, иначе среда разработки не поймёт, с чем имеет дело. Lombok поддерживает все основные Java IDE. Интеграция бесшовная. Все функции вроде «показать использования» и «перейти к реализации» продолжают работать как и раньше, перемещая вас к соответствующему полю/классу.
Lombok в действии
Лучший способ познакомиться с Lombok — увидеть его в действии. Рассмотрим несколько типичных примеров.
Оживить объект POJO
При помощи «старых добрых объектов Java» (POJO) мы отделяем данные от обработки, чтобы сделать код проще для чтения и упростить сетевые передачи. В простом POJO есть несколько приватных полей, а также соответствующие геттеры и сеттеры. Они справляются с работой, но требуют большого количества шаблонного кода.
Lombok помогает использовать POJO более гибким и структурированным образом без дополнительного кода. Вот так с помощью аннотации @Data мы упрощаем базовый POJO:
@Data — просто удобная аннотация, которая применяет сразу несколько аннотаций Lombok.
- @ToString генерирует реализацию для метода toString() , которая состоит из аккуратного представления объекта: имя класса, все поля и их значения.
- @EqualsAndHashCode генерирует реализации equals и hashCode , которые по умолчанию используют нестатические и нестационарные поля, но настраиваются.
- @Getter / @Setter генерирует геттеры и сеттеры для частных полей.
- @RequiredArgsConstructor создаёт конструктор с требуемыми аргументами, где обязательными являются окончательные поля и поля с аннотацией @NonNull (подробнее об этом ниже).
Одна эта аннотация просто и элегантно охватывает многие типичные случаи использования. Но POJO не всегда покрывает необходимую функциональность. @Data — полностью изменяемый класс, злоупотребление которым может повысить сложность и ограничить параллелизм, что негативно отражается на живучести приложения.
Есть другое решение. Вернёмся к нашему классу User , сделаем его неизменяемым и добавим несколько других полезных аннотаций.
Аннотация @Value аналогична @Data за исключением того, что все поля по умолчанию являются закрытыми и окончательными, а сеттеры не создаются. Благодаря этому объекты @Value сразу становятся неизменяемыми. Поскольку все поля являются окончательными, конструктора аргументов нет. Вместо этого Lombok использует @AllArgsConstructor . В результате получается полностью функциональный, неизменяемый объект.
Но неизменяемость не очень полезна, если вам нужно всего лишь создать объект с помощью конструктора all-args. Как объясняет Джошуа Блох в книге «Эффективное программирование на Java», при наличии большого количества параметров конструктора следует использовать билдеры. Тут вступает в действие класс @Builder , автоматически генерируя внутренний класс билдера:
Генерация билдера упрощает создание объектов с большим количеством аргументов и добавлением новых полей в будущем. Статический метод возвращает экземпляр билдера для задания всех свойств объекта. После этого вызов build() возвращает инстанс.
Аннотацию @NonNull можно использовать для утверждения, что эти поля не являются нулевыми при создании экземпляра объекта, иначе выбрасывается исключение NullPointerException . Обратите внимание, что поле аватара аннотировано @NonNull , но не задано. Дело в том, что аннотация @Builder.Default по умолчанию указывает на default.png.
Также обратите внимание, как билдер использует favoriteFood , единственное название свойства в нашем объекте. При размещении аннотации @Singular на свойстве коллекции Lombok создаёт специальные методы билдера для индивидуального добавления элементов в коллекцию, а не для одновременного добавления всей коллекции. Это особенно хорошо для тестов, потому что способы создания маленьких коллекций в Java нельзя назвать простыми и быстрыми.
Наконец, параметр toBuilder = true добавляет метод экземпляра toBuilder() , который создаёт объект билдера, заполненный всеми значениями этого экземпляра. Так легко создаётся новый инстанс, предварительно заполненный всеми значениями из исходного, так что остаётся изменить лишь необходимые поля. Это особенно полезно для классов @Value , поскольку поля неизменяемы.
Несколько примечаний дополнительно настраивают специальные функции сеттера. @Wither создаёт методы withX для каждого свойства. На входе — значение, на выходе — клон экземпляра с обновлённым значением одного поля. @Accessors позволяет настраивать автоматически созданные сеттеры. Параметр fluent=true отключает конвенцию “get” и “set” для геттеров и сеттеров. В определённых ситуациях это может быть полезной заменой @Builder .
Если реализация Lombok не подходит для вашей задачи (и вы посмотрели на модификаторы аннотаций), то всегда можно просто взять и написать собственную реализацию. Например, если у вас класс @Data , но один геттер нуждается в пользовательской логике, просто реализуйте этот геттер. Lombok увидит, что реализация уже предоставлена, и не перезапишет её автоматически созданной реализацией.
С помощью всего нескольких простых аннотаций базовый POJO получил так много богатых функций, которые упрощают его использование, не загружая работой нас, инженеров, не отнимая время и не увеличивая затраты на разработку.
Удаление шаблонного кода
Lombok полезен не только для POJO: его можно применить на любом уровне приложения. Следующие способы использования Lombok особенно полезны в классах компонентов, таких как контроллеры, службы и DAO (объекты доступа к данным).
Ведение журнала — базовое требование для всех частей программы. Любой класс, выполняющий значимую работу, должен записывать лог. Таким образом, стандартный логгер становится шаблоном для каждого класса. Lombok упрощает этот шаблон до одной аннотации, которая автоматически определяет и создаёт экземпляр логгера с правильным именем класса. Существует несколько различных аннотаций в зависимости от структуры журнала.
После объявления логгера добавляем наши зависимости:
Аннотация @FieldDefaults добавляет ко всем полям окончательный и приватный модификаторы. @RequiredArgsConstructor создаёт конструктор, который устанавливает экземпляр UserDao . Аннотация @NonNull добавляет проверку в конструкторе и создаёт исключение NullPointerException , если экземпляр UserDao равен нулю.
Но подождите, это ещё не всё!
Есть ещё много ситуаций, где Lombok проявляет себя с лучшей стороны. Предыдущие разделы показывали конкретные примеры, но Lombok может облегчить разработку во многих областях. Вот несколько небольших примеров, как эффективнее его использовать.
Хотя в Java 9 появилось ключевое слово var , но переменную всё равно можно переназначить. В Lombok есть ключевое слово val , которое выводит окончательный тип локальной переменной.
Некоторые классы c чисто статическими функциями не предназначены для инициализации. Один из способов предотвратить создание экземпляра — объявить приватный конструктор, который выбрасывает исключение. Lombok кодифицировал этот шаблон в аннотации @UtilityClass . Она генерирует приватный конструктор, который создаёт исключение, окончательно выводит класс и делает все методы статическими.
Java часто критикуют за многословность из-за проверяемых исключений. Отдельная аннотация Lombok устраняет их: @SneakyThrows . Как и следовало ожидать, реализация довольно хитрая. Она не перехватывает исключения и даже не оборачивает исключения в RuntimeException . Вместо этого она полагается на тот факт, что во время выполнения JVM не проверяет согласованность проверяемых исключений. Так делает только javac. Поэтому Lombok с помощью преобразования байт-кода во время компиляции отключает эту проверку. В результате получается запускаемый код.
Сравнение бок о бок
Прямое сравнение лучше всего демонстрирует, сколько кода экономит Lombok. В плагине IDE есть функция “de-lombok”, которая приблизительно преобразует большинство аннотаций Lombok в нативный Java-код (аннотации @NonNull не конвертируются). Таким образом, любая IDE с установленным плагином сможет конвертировать большинство аннотаций в собственный код Java и обратно. Вернёмся к нашему классу User .
Класс Lombok — всего лишь 13 простых, читаемых, понятных строк. Но после запуска de-lombok, класс превращается более чем в сто строк шаблонного кода!
То же самое сделаем для класса UserService .
Вот примерный аналог в стандартном Java-коде.
Оценка эффекта
На портале Grubhub более ста бизнес-сервисов, связанных с доставкой еды. Мы взяли один из них и запустили функцию “de-lombok” в плагине Lombok IntelliJ. В результате изменилось около 180 файлов, а кодовая база выросла примерно на 18 000 строк кода после удаления 800 случаев использований Lombok. В среднем, каждая строка Lombok экономит 23 строки Java. С таким эффектом трудно представить Java без Lombok.
Резюме
Lombok — отличный помощник, который реализует новые функции языка, не требуя особых усилий со стороны разработчика. Конечно, проще установить плагин, чем обучить всех инженеров новому языку и портировать существующий код. Lombok не всесилен, но уже из коробки достаточно мощный, чтобы реально помочь в работе.
Ещё одно преимущество Lombok в том, что он сохраняет согласованность кодовых баз. У нас более ста различных сервисов и распределённая команда по всему миру, так что согласованность кодовых баз облегчает масштабирование команд и снижает нагрузку на переключение контекста при запуске нового проекта. Lombok работает для любой версии начиная с Java 6, поэтому мы можем рассчитывать на его доступность во всех проектах.
Для Grubhub это больше, чем просто новые функции. В конце концов, весь этот код можно написать вручную. Но Lombok упрощает скучные части кодовой базы, не влияя на бизнес-логику. Это позволяет сфокусироваться на вещах, действительно важных для бизнеса и наиболее интересных для наших разработчиков. Монтонный шаблонный код — это пустая трата времени программистов, рецензентов и мейнтейнеров. Кроме того, поскольку этот код больше не пишется вручную, то устраняет целые классы опечаток. Преимущества автогенерации в сочетании с мощью @NonNull уменьшают вероятность ошибок и помогают нашей разработке, которая направлена на доставку еды к вашему столу!
Источник