Автор оригинала: Dhananjay Singh.
Обзор
Lombok -это библиотека с открытым исходным кодом, которая используется для сокращения стандартного кода в классах Java. Это достигается путем замены многих повторяющихся фрагментов кода простыми и краткими аннотациями.
Ломбок внедряется в процесс сборки (через ваш проект/ИДЕЮ) и автоматически генерирует байт-код для нужных методов в ваши файлы .class
.
Таким образом, с помощью Lombok вы можете избавиться от всех методов получения и настройки, хэш-кода, методов равенства и многого другого, просто добавив аннотации.
Установка на Ломбоке
Установка Ломбока в Eclipse
Загрузите файл Lombok .jar
с официального сайта . Запустите загруженный файл lombok.jar
файл или выполните команду в терминале:
java -jar lombok.jar
Это запустит программу установки:
Если он автоматически не определил местоположение предпочитаемой среды разработки, вы можете указать местоположение вручную, а затем завершить установку, нажав “Установить/обновить”.
Вы можете проверить, активна установка или нет, в диалоговом окне Eclipse “О программе” в конце текста об авторских правах:
Установка Ломбока в NetBeans
Загрузите файл Lombok .jar
с официального сайта и добавьте его в библиотеки проекта.
Активировать плагин так же просто, как выбрать Свойства проекта -> Сборка - Компиляция -> Включить обработку аннотаций в редакторе
.
Установка NetBeans
Установка Ломбока в IntelliJ
Идея IntelliJ позволяет очень легко устанавливать плагины в IDE:
Перейдите в
Файл -> Настройки -> Плагины
и выберитеПросмотр репозиториев
Найдите
Плагин Lombok
и нажмитеУстановить плагин
После этого просто перезапустите среду разработки, и все готово.
Для получения других идей вы можете посетить их домашнюю страницу и проверить раздел Установка .
Зависимость от Ломбока
Нам нужно добавить следующую зависимость в ваш pom.xml:
org.projectlombok lombok {version} provided
Примечание: Область действия предоставлена
поскольку Lombok является чистой зависимостью от сборки, а не зависимостью во время выполнения. Это означает, что мы ожидаем, что приложение предоставит нам зависимость от времени выполнения.
Аннотации на Ломбоке
@Добытчик и @Сеттер
Эти аннотации можно использовать как на уровне поля, так и на уровне класса. Если он используется на уровне класса, он будет генерировать геттеры и сеттеры для всех полей в классе:
@Getter @Setter public class User { private String name; private String email; }
Как видно из окна IDE, оба поля теперь имеют свои соответствующие методы получения и настройки, хотя на самом деле мы сами их не определяли.
Если вам нужны геттеры/сеттеры только для определенных полей, соответствующим образом их аннотируйте:
public class User { @Getter @Setter private String name; private String email; }
Если вы хотите изменить уровень доступа к сгенерированным методам и полям, вы можете сделать это с помощью аргумента Уровень доступа
:
@Setter(AccessLevel.PROTECTED) private String email;
Существует несколько уровней доступа, которые Ломбок предлагает в виде аргументов:
- МОДУЛЬ
- НЕТ (Означает отсутствие генерации чего-либо или полное отсутствие метода)
- ПАКЕТ
- ЧАСТНЫЙ
- ЗАЩИЩЕННЫЙ
- ОБЩЕСТВЕННЫЙ
Аннотации конструктора
@AllArgsConstructor
@AllArgsConstructor
декоратор создаст общедоступный конструктор, все поля, объявленные в вашем классе, будут расположены в том же порядке, в каком они определены:
@AllArgsConstructor public class User { private String name; private String email; }
Сгенерированный конструктор будет выглядеть следующим образом:
public User(String name, String email) { this.name = name; this.email = email; }
@NoArgsConstructor
Git Essentials
Ознакомьтесь с этим практическим руководством по изучению Git, содержащим лучшие практики и принятые в отрасли стандарты. Прекратите гуглить команды Git и на самом деле изучите это!
@NoArgsConstructor
создаст конструктор без аргументов:
@NoArgsConstructor public class User { private String name; private String email; }
Сгенерированный конструктор будет выглядеть следующим образом:
public User() {}
Примечание: Если конструктор не может быть создан из-за наличия окончательных
полей, появится сообщение об ошибке.
@RequiredArgsConstructor
@RequiredArgsConstructor
создаст конструктор со всеми окончательными
полями в классе:
@RequiredArgsConstructor public class User { private final String name; private String email; }
Сгенерированный конструктор будет выглядеть следующим образом:
public User(final String name) { this.name = name; }
Примечание: @NoArgsConstructor
и @RequiredArgsConstructor
не могут использоваться вместе и вызовут ошибку времени компиляции, если вы попытаетесь это сделать.
@EqualsAndHashCode
@EqualsAndHashCode
может использоваться на уровне класса, который будет генерировать реализации для equals(Объект другой)
и hashCode()
методов.
По умолчанию он будет использовать все нестатические и нестационарные поля:
@EqualsAndHashCode public class User { private String name; private String email; private Integer age; }
Если есть определенные поля, которые вы не хотите включать в методы equals
или hashCode
, мы можем исключить эти конкретные поля с помощью @EqualsAndHashCode.Исключить
:
@EqualsAndHashCode public class User { private String name; private String email; @EqualsAndHashCode.Exclude private Integer age; }
В качестве альтернативы мы можем указать поля, которые будут включены , используя @EqualsAndHashCode.Включите
и @EqualsAndHashCode(только полностью включен)
:
@EqualsAndHashCode(onlyExplicitlyIncluded = true) public class User { @EqualsAndHashCode.Include private String name; @EqualsAndHashCode.Include private String email; private Integer age; }
@toString
Аналогично, @toString
можно использовать для создания реализации toString ()
. По умолчанию будут напечатаны все нестатические поля. Вы можете указать, включать или пропускать определенные поля, используя комбинацию @toString.Исключить
, @toString.Включите
, и @toString(только полностью включено)
как и раньше:
@ToString(onlyExplicitlyIncluded = true) public class User { @ToString.Include private String name; @ToString.Include private String email; private Integer age; }
@Данные
Обычно в вашем POJO есть все вышеупомянутые аннотации. Вместо того, чтобы писать аннотацию для каждого из них, Ломбок дал агрегированную аннотацию @Data
.
Это объединяет функции @Getter/@Setter
, @EqualsAndHashCode
, @toString
и @RequiredArgsConstructor
вместе, как если бы вы сложили их все:
@Data public class User { private final String name; private String email; }
@Значение
Иногда вы хотите, чтобы ваш объект оставался неизменным после его создания. @Value
является неизменяемым вариантом @Data
и используется именно для этой цели.
По умолчанию все поля являются окончательными, а задатчики не создаются:
@Value public class User { private String name; private String email; }
@Строитель
Шаблон конструктора-это шаблон творческого проектирования, который используется для пошагового построения объектов.
Как вы, возможно, уже знаете, хотя шаблон компоновщика позволяет создавать экземпляры объектов более подробным и чистым способом, чем с помощью конструкторов, базовый код, необходимый для реализации шаблона, довольно запутан.
@Builder
позволяет автоматически создавать код, необходимый для этого:
@Builder @Data public class User { private String name; private String email; }
Теперь вы можете создать объект User
с помощью шаблона компоновщика без всего кода, необходимого для его поддержки:
User user = new User.UserBuilder() .email("[email protected]") .name("test name") .build(); System.out.println(user.getEmail());
Регистрация
В нашем приложении часто используются регистраторы, и обычно нам нужно инициализировать переменную журнала в верхней части класса, а затем использовать ее в наших методах.
Это может быть достигнуто с помощью @Log
, который автоматически создает это поле:
@Log public class Test { public static void main(String[] args) { log.severe("Log message"); } }
@@Log
создает переменную журнала с java.util.logging.Logger.getLogger(Пример журнала.класс.getName())
объект.
Ломбок также поддерживает другие фреймворки ведения журнала, которые могут использоваться такими аннотациями, как @Log4j
, @Slf4j
и т.д.
Полный список поддерживаемых фреймворков можно посмотреть здесь .
Написание Потокобезопасных Методов
В Java для многопоточных приложений мы используем ключевое слово synchronized
в критических разделах кода.
Обычно мы используем синхронизированный
блок с объектом в качестве блокировки:
public class SynchronizedJavaExample { private static final Object lock = new Object(); public static void test() { synchronized (lock) { System.out.println("test"); } } }
Это может быть автоматически сгенерировано с помощью ключевого слова @Synchronized
:
public class SynchronizedExample { @Synchronized public static void test() { System.out.println("test"); } }
Вывод
В этой статье мы представили введение в проект Ломбок и увидели, как он облегчает наш процесс разработки, сокращая стандартный код с помощью простых аннотаций. Это значительно повышает читабельность и краткость.
Код для примеров, используемых в этой статье, можно найти на Github .