Всем привет!
Давненько не было постов на канале, что поделать - конец квартала, авральный режим on.
Но я вернулся) К делу.
Java всегда славилась своим boiler plate кодом. Ремарка - конечно же не только boiler plate, но сейчас про него и про борьбу с ним. Борьба идет, и в Java 16 (а точнее в Java 14 но в режиме preview) появились records, они же записи.
Делаешь вот такое объявление:
и получаешь из коробки конструктор, getter, equals(), hashСode() и toString().
Т.е все то, что раньше приходилось писать руками или использовать Lombok. Ага, Lombok. Т.е. он стал не нужен? Не совсем. Если внимательно глянуть на список того, что под капотом делает record, то можно заметить, что там нет setter-а. Т.е. record - это иммутабельный объект и value object. Две записи с одним и тем же набором полей всегда равны. Это не баг, это фича. Маленькое дополнение - record еще меняет классический getter c getXyz на просто xyz(), но это детали. Еще дополнение - вот тут среди прочих фичей Java 17 достаточно интересно о работе с record https://habr.com/ru/companies/jugru/articles/652821/
Т.е. получается, что record заменяет @Value из Lombok.
Но не заменяет:
1) полноценный @Data - изменяемый класс без boiler plate
2) кейс, когда мы не хотим все сразу getter, toString() ... а хотим только часть этих методов
3) @Builder - тут проще показать, чем объяснять:
4) @Log - простое добавление логгера в класс
5) и наконец @SneakyThrows - если вы не любите checked exception
#java #lombok #boiler_plate_free
Давненько не было постов на канале, что поделать - конец квартала, авральный режим on.
Но я вернулся) К делу.
Java всегда славилась своим boiler plate кодом. Ремарка - конечно же не только boiler plate, но сейчас про него и про борьбу с ним. Борьба идет, и в Java 16 (а точнее в Java 14 но в режиме preview) появились records, они же записи.
Делаешь вот такое объявление:
public record Point(int x, int y) {}
и получаешь из коробки конструктор, getter, equals(), hashСode() и toString().
Т.е все то, что раньше приходилось писать руками или использовать Lombok. Ага, Lombok. Т.е. он стал не нужен? Не совсем. Если внимательно глянуть на список того, что под капотом делает record, то можно заметить, что там нет setter-а. Т.е. record - это иммутабельный объект и value object. Две записи с одним и тем же набором полей всегда равны. Это не баг, это фича. Маленькое дополнение - record еще меняет классический getter c getXyz на просто xyz(), но это детали. Еще дополнение - вот тут среди прочих фичей Java 17 достаточно интересно о работе с record https://habr.com/ru/companies/jugru/articles/652821/
Т.е. получается, что record заменяет @Value из Lombok.
Но не заменяет:
1) полноценный @Data - изменяемый класс без boiler plate
2) кейс, когда мы не хотим все сразу getter, toString() ... а хотим только часть этих методов
3) @Builder - тут проще показать, чем объяснять:
Person.builder()
.name("Adam Savage")
.city("San Francisco")
.build();
4) @Log - простое добавление логгера в класс
5) и наконец @SneakyThrows - если вы не любите checked exception
#java #lombok #boiler_plate_free
Хабр
Java 17 для тех, кто не следил. Часть 1
Уже вышла Java 18, но для всех, кто сидит на LTS, по-прежнему остаётся актуальной версия 17. Такие люди могут не отслеживать постоянно фичи каждой новой версии, а спокойно заниматься своими делами и...