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

Будущее Ломбока

После общего выпуска JDK 16: https://jdk.java.net/16 / и особенно… С пометкой “обсуждение”, “ява”, “ломбок”.

После общего выпуска JDK 16: https://jdk.java.net/16/ и особенно https://openjdk.java.net/jeps/396 У Lombok есть несколько проблем со сборкой из-за его зависимости от JDKinternals, который 16 закрыл, обсуждение здесь: https://github.com/rzwitserloot/lombok/issues/2681

Учитывая тот факт, что Java 16 выводит записи из предварительного просмотра, а библиотеки, такие как Lombok (over), полагаются на внутренние функции JDK, имеет ли смысл больше использовать Lombok в нашем коде?

Записи Java не требуют каких-либо дополнительных зависимостей, поэтому, я думаю, лучше использовать их вместо Lombok.

Если ваш проект поддерживает Java 14, вы уже можете использовать их в Eclipse. Для этого на маркетплейсе есть плагин:

Для этого на маркетплейсе есть плагин:

Способ ломбока Добавьте аннотации ломбока поверх класса:

import lombok.AllArgsConstructor;
import lombok.Getter;

@AllArgsConstructor
@Getter
public class TransactionLombok {
    private final String from;
    private final String to;
    private final int amount;
}

Конструктор со всеми аргументами и получателями генерируется lombok.

TransactionLombok transactionLombok = new TransactionLombok("you", "me", 100);
assertThat(transactionLombok.getFrom()).isEqualTo("you");
assertThat(transactionLombok.getTo()).isEqualTo("me");
assertThat(transactionLombok.getAmount()).isEqualTo(100);

Способ записи Определяет запись:

record TransactionRecord(String from, String to, int amount) {
}

Вы получаете конструктор и геттеры по умолчанию в записи:

TransactionRecord transactionRecord = new TransactionRecord("you", "me", 100);
assertThat(transactionRecord.from()).isEqualTo("you");
assertThat(transactionRecord.to()).isEqualTo("me");
assertThat(transactionRecord.amount()).isEqualTo(100);

Как мы можем видеть, ключевое слово new record выполняет ту же работу гораздо более аккуратно. Что-нибудь еще? Да, записи могут сделать больше, чем это. Он также автоматически предоставляет вам значения equals, hashCode и toString. Так что это тоже работает.

assertThat(transactionRecord.equals(anotherTransactionRecord)).isTrue();
assertThat(transactionRecord.hashCode()).isEqualTo(anotherTransactionRecord.hashCode());
assertThat(transactionRecord.toString()).isEqualTo("TransactionRecord[from=you, to=me, amount=100]");

Находясь в ломбоке, вы должны добиться того же, добавив еще несколько аннотаций, подобных этой:

@ToString
@EqualsAndHashCode
@AllArgsConstructor
@Getter
public class TransactionLombok {

Или просто сделайте это ценностью:

@Value
public class TransactionLombok {

Таким образом, ключевое слово record можно рассматривать как эквивалент аннотации lombok @Value . Настраиваемый конструктор Кроме того, records также поддерживает настраиваемые конструкторы, подобные этому:

public TransactionRecord(String from, String to) {
    this(from, to, 0);
}

И если вы хотите проверить аргументы, это также возможно:

public TransactionRecord {
    Objects.requireNonNull(from);
    Objects.requireNonNull(to);
}

Могут ли записи заменить ломбок? Нет. Несмотря на то, что records предоставляет множество приятных функций и аккуратен в коде, lombok по-прежнему обладает гораздо большим количеством функций, чем records. Например:

@Builder
@With
public class TransactionLombok {

Записи просто не предоставляют функций построения и клонирования. Поэтому ломбок, скорее всего, еще долго будет сосуществовать с рекордами.

Оригинал: “https://dev.to/gauravratnawat/future-of-lombok-g22”