Всем привет!
Давненько не было постов на канале, что поделать - конец квартала, авральный режим 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.
Т.е. получается, что record заменяет @Value из Lombok.
Но не заменяет:
полноценный @Data - изменяемый класс без boiler plate
кейс, когда мы не хотим все сразу getter, toString() ... а хотим только часть этих методов
@Builder - тут проще показать, чем объяснять:
Person.builder().name("Adam Savage").city("San Francisco").build();
@Log - простое добавление логгера в класс
и наконец @SneakyThrows - если вы не любите checked exception