Комментарии 24
Но если вдруг нужно только геттер, но без сеттера, можно сделать так:
@Getterpublic class ImmutableUser { private final String username;}
Теперь
username
можно читать, но нельзя изменять — удобно для иммутабельных объектов.
А что мешает сделать поле просто публичным?
Рекорды - просто существуют.
ломбок был тогда, когда рекордов еще не было
За моим окном 2025 статья свежая и рекорды уже есть. А за вашим окном какой год?
Тот, в котором более 60% java проектов используют java ниже 17 версии )
https://newrelic.com/resources/report/2024-state-of-the-java-ecosystem
Учитывая что не-lts версии используют менее 2%, более 60% проектов используют java 8 и 11 )
после 8ой версии уже вышло много LTS
https://www.oracle.com/java/technologies/java-se-support-roadmap.html
У тех кто не обновился до хотя бы 17 такой кровавый энтерпрайз что им тоже не надо. Новичковые статьи про Ломбук их разработчикам точно не нужны. И их джунам (не уверен что они ниже мидлов нанимают вообще) не нужны.
У меня в окрестностях включая знакомых весь энтерпрайз уже до 17 обновился. Про 21 думают и местами катят, но еще нет. Может где-то в недрах нефтегаза разве что осталась джава <17.
В Сбере полно 8 и 11
В статье, хоть она весьма скудная и раскрывает только малую часть того на что способен Lombok, затрагиваются проблемы помимо иммутабельных объектов.
Если вы писали на Java хоть раз, то знаете этот ужас — бесконечные геттеры, сеттеры, конструкторы, да ещё
toString()
иequals()
на закуску. Одной только стандартной обвязки в классах моделей больше, чем самого кода.
Ага, конечно.
Ответом на первый абзац является одно предложение: Используйте рекорды. Везде. Даже вместо привычного Pair делайте рекорд. Эти три строки кода делающие рекорд вместо Pair невероятно полезны.
Рекорды не только работают быстрее, но еще и улучшат стиль вашего кода и уменьшат количество багов с мутабельным стейтом.
Прям коробит, когда люди навешивают к @Data
AAC и NAC бездумно, типа мол пусть будет. @Data
и так включает RAC, который в зависимости от наличия final на полях всё сделает в лучшем виде.
Но юзать @Data
желательно ... только лишь нигде и никогда. Гораздо предпочтительнее иммутабельный аналог -- @Value
, который нельзя повешать разве только на JPA сущности, но так и @Data
в них тоже не выстреливает проблемами только в простых случаях.
Ну и да, Accessors, Builder/SuperBuilder, UtilityClass, SneakyThrows, lombok.config и много чего ещё -- вообще не упомянуто. Поэтому за статью минус.
Блин, написал комментарий, проскроллил выше, чтобы поставить "минус", а я там как будто уже ткнул статье "плюс" ... wtf? Рука соскользнула? 😂
@Value после появления рекордов уже не актуален
Скорее да, чем нет, но личное предпочтение у меня — DTO в апишке удобнее всё-таки описывать @Value
+ @Builder
, а уже внутри модельки или кортежи рекордами описывать. Когда на поля хочешь накинуть тонну аннотаций, класс выглядит красивше :)
Субъективное, очевидно.
Не все сторонние библиотеки уже поддерживают рекорды
Нету встроенного Builder/toBuilder (https://github.com/Randgalt/record-builder)
Чисто эстетически декларация полей как конструктор мне не нравится (борюсь с этим)
Нет простого способа исключить из hash/toString
Ого, какая свежатина! Наверное, эта библиотека только вышла? Почему никто не слышал про эти крутые фичи?
Как в известном видео: в графе "хобби" я поставила вам минус
Lombok в Java: избавляемся от бойлерплейта