Рубрики
Без рубрики

Проект Ломбок: Сокращение Стандартного Кода Java

Автор оригинала: 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 .