Как стать автором
Обновить

Комментарии 24

Но если вдруг нужно только геттер, но без сеттера, можно сделать так:

@Getterpublic class ImmutableUser {    private final String username;}

Теперь username можно читать, но нельзя изменять — удобно для иммутабельных объектов.

А что мешает сделать поле просто публичным?

Сделав публичным вы также позволите его менять. Речь же, как я понял, про то, что после инстанциации объекта поле уже нельзя поменять.

Да. Не защищая Lombok. Но такие get/set методы бывают удобны чтобы в отладке брейкпоинт поставить.

Правда Lombok с отладкой не очень дружит.

За моим окном 2025 статья свежая и рекорды уже есть. А за вашим окном какой год?

Тот, в котором более 60% java проектов используют java ниже 17 версии )

https://newrelic.com/resources/report/2024-state-of-the-java-ecosystem

Учитывая что не-lts версии используют менее 2%, более 60% проектов используют java 8 и 11 )

У тех кто не обновился до хотя бы 17 такой кровавый энтерпрайз что им тоже не надо. Новичковые статьи про Ломбук их разработчикам точно не нужны. И их джунам (не уверен что они ниже мидлов нанимают вообще) не нужны.

У меня в окрестностях включая знакомых весь энтерпрайз уже до 17 обновился. Про 21 думают и местами катят, но еще нет. Может где-то в недрах нефтегаза разве что осталась джава <17.

Но это не норма, а недоработки на местах, судя по тому, что в моих проектах зарегистрировали работу на 8-ке как архитектурное отклонение и поставили в план обновляться на 17-ю.

Когда обновитесь до 17-й, она тоже уже устареет (если Вы про Сбер). В общем-то, как бы, кхм, почти уже...

В статье, хоть она весьма скудная и раскрывает только малую часть того на что способен Lombok, затрагиваются проблемы помимо иммутабельных объектов.

Если вы писали на Java хоть раз, то знаете этот ужас — бесконечные геттерысеттерыконструкторы, да ещё toString() и equals() на закуску. Одной только стандартной обвязки в классах моделей больше, чем самого кода.

Ага, конечно.

Ответом на первый абзац является одно предложение: Используйте рекорды. Везде. Даже вместо привычного Pair делайте рекорд. Эти три строки кода делающие рекорд вместо Pair невероятно полезны.

Рекорды не только работают быстрее, но еще и улучшат стиль вашего кода и уменьшат количество багов с мутабельным стейтом.

Используйте рекорды. Везде.

Расскажите, пожалуйста, как использовать рекорды в качестве Entity в Hibernate?

Hibernat, кстати, тоже дрянь аналогично ломбоку. Присматриваюсь к SpringDataJDBC, и в нем, между прочим, рекорды использовать можно.

Прям коробит, когда люди навешивают к @Data AAC и NAC бездумно, типа мол пусть будет. @Data и так включает RAC, который в зависимости от наличия final на полях всё сделает в лучшем виде.

Но юзать @Data желательно ... только лишь нигде и никогда. Гораздо предпочтительнее иммутабельный аналог -- @Value, который нельзя повешать разве только на JPA сущности, но так и @Data в них тоже не выстреливает проблемами только в простых случаях.

Ну и да, Accessors, Builder/SuperBuilder, UtilityClass, SneakyThrows, lombok.config и много чего ещё -- вообще не упомянуто. Поэтому за статью минус.

Блин, написал комментарий, проскроллил выше, чтобы поставить "минус", а я там как будто уже ткнул статье "плюс" ... wtf? Рука соскользнула? 😂

Скорее да, чем нет, но личное предпочтение у меня — DTO в апишке удобнее всё-таки описывать @Value + @Builder , а уже внутри модельки или кортежи рекордами описывать. Когда на поля хочешь накинуть тонну аннотаций, класс выглядит красивше :)

Субъективное, очевидно.

  1. Не все сторонние библиотеки уже поддерживают рекорды

  2. Нету встроенного Builder/toBuilder (https://github.com/Randgalt/record-builder)

  3. Чисто эстетически декларация полей как конструктор мне не нравится (борюсь с этим)

  4. Нет простого способа исключить из hash/toString

Зарегистрируйтесь на Хабре, чтобы оставить комментарий