ru
Feedback
Библиотека Java разработчика

Библиотека Java разработчика

Открыть в Telegram

📚 Лайфхаки, приёмы и лучшие практики для Java-разработчиков. Всё, что ускорит код и прокачает навыки. Java, Spring, Maven, Hibernate. По всем вопросам @evgenycarter РКН clck.ru/3KoGeP

Больше

📈 Аналитический обзор Telegram-канала Библиотека Java разработчика

Канал Библиотека Java разработчика (@bookjava) языкового сегмента Русский является активным участником. Сейчас сообщество объединяет 10 278 подписчиков, занимая 12 030 место в категории Технологии и приложения и 63 913 место в регионе Россия.

📊 Показатели аудитории и динамика

С момента создания невідомо проект демонстрирует стремительный рост, собрав аудиторию из 10 278 подписчиков.

Согласно последним данным от 05 июня, 2026, канал показывает стабильную активность. За последние 30 дней изменение числа участников составило 20, а за последние 24 часа — 0, при этом общий охват остаётся высоким.

  • Статус верификации: Не верифицирован
  • Уровень вовлечённости (ER): Средний показатель вовлечённости аудитории составляет 8.29%. В первые 24 часа после публикации контент обычно набирает 3.77% реакций от общего числа подписчиков.
  • Охват публикаций: В среднем каждый пост получает 852 просмотров. В течение первых суток публикация набирает 388 просмотров.
  • Реакции и взаимодействия: Аудитория активно поддерживает контент: среднее количество реакций на один пост — 6.
  • Тематические интересы: Контент сосредоточен на ключевых темах, таких как string, интерфейс, строка, boot, api.

📝 Описание и контентная политика

Автор описывает ресурс как площадку для выражения субъективного мнения:
📚 Лайфхаки, приёмы и лучшие практики для Java-разработчиков. Всё, что ускорит код и прокачает навыки. Java, Spring, Maven, Hibernate. По всем вопросам @evgenycarter РКН clck.ru/3KoGeP

Благодаря высокой частоте обновлений (последние данные получены 07 июня, 2026) канал поддерживает актуальность и высокий уровень охвата публикаций. Аналитика показывает, что аудитория активно взаимодействует с контентом, что делает его важной точкой влияния в категории Технологии и приложения.

10 278
Подписчики
Нет данных24 часа
+27 дней
+2030 день
Архив постов
👨‍💻 Как уменьшить количество boilerplate-кода с помощью Lombok Сегодня хочу показать вам один из любимых инструментов — Project Lombok. Он позволяет избавиться от тонны шаблонного кода, который мы ежедневно пишем в Java. 🔹 Вместо десятков строк с геттерами, сеттерами, equals/hashCode и конструкторами, ты просто добавляешь аннотации:

@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
    private String name;
    private int age;
}
И всё! Lombok сам сгенерирует: - геттеры/сеттеры - конструкторы - toString(), equals() и hashCode() 🔹 Часто забываешь про @Builder? Он тоже есть! И позволяет удобно создавать объекты:

User user = User.builder()
    .name("Женя")
    .age(30)
    .build();
🧨 Важно: IDE не всегда сразу видит Lombok-код. Убедись, что у тебя установлен Lombok plugin в IntelliJ IDEA или Eclipse. 👉@BookJava

🧪 Зачем Java-разработчику тестировать логику в SQL? Привет! Сегодня покажу вам полезный трюк для тех, кто пишет сложные запросы в PostgreSQL (или любом другом SQL-движке) и хочет их тестировать ещё до интеграции в Java-приложение. Если у тебя в проекте сложная логика в JOIN, CASE, оконных функциях или CTE — протестируй это на стороне базы, как обычную функцию. 🔹 Создаём функцию в PostgreSQL:

CREATE OR REPLACE FUNCTION test_discount(user_id INT)
RETURNS NUMERIC AS $$
BEGIN
  RETURN (
    SELECT 
      CASE 
        WHEN u.vip = true THEN 0.2
        ELSE 0.05
      END
    FROM users u WHERE u.id = user_id
  );
END;
$$ LANGUAGE plpgsql;
🔹 Проверяем прямо в базе:

SELECT test_discount(101); -- вернёт 0.2 или 0.05
✅ Это удобно, когда: - Ты хочешь протестировать ветки логики без запуска всего приложения; - У тебя CI/CD запускает SQL-тесты отдельно (через pgTAP, например); - Ты хочешь быстро показать запрос аналитику или тимлиду без Java-контекста. 💡 Лайфхак: если ты используешь Liquibase/Flyway — можно держать такие функции прямо в changelog'ах как test-only objects, не влияя на runtime-приложение. Попробуй — экономит массу времени на ревью и отладке запросов! 👉@BookJava

👩‍💻 Сообщения, которые не теряются: Брокеры против хаоса в Java Приглашаем на открытый урок. 🗓 08 апреля в 20:00 МСК 🆓 Бе
👩‍💻 Сообщения, которые не теряются: Брокеры против хаоса в Java Приглашаем на открытый урок. 🗓 08 апреля в 20:00 МСК 🆓 Бесплатно. Урок в рамках старта курса «Java Developer. Professional». Узнайте, как обеспечить 100% доставку данных в распределенных Java-системах: боремся с потерями, хаосом и scaling-вызовами. О чём поговорим: ✔️Брокеры vs хаос: Как Kafka, RabbitMQ и ActiveMQ спасают данные от потерь. ✔️ Асинхронный Java на практике: Пишем код с гарантированной доставкой сообщений. ✔️ Антипаттерны: Топ-5 ошибок, которые приводят к краху системы (и как их избежать). Кому будет интересно: Вебинар будет полезен разработчикам, архитекторам и специалистам по интеграции, работающим с распределенными системами и стремящимся обеспечить надежную доставку данных. В результате урока: Участники научатся выбирать брокеры под задачи, реализовывать паттерны вроде Publisher-Subscriber , а также получат шаблоны кода для интеграции в свои проекты. 🔗 Ссылка на регистрацию: https://vk.cc/cKqBkW Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576

Сегодня я покажу вам простой, но мощный приём, который помогает упростить работу с коллекциями в Java — Collectors.collectingAndThen. Если вы когда-нибудь писали что-то вроде:

List<String> list = someStream
    .collect(Collectors.toList());
return Collections.unmodifiableList(list);
то collectingAndThen сделает это в одну строку:

List<String> list = someStream.collect(
    Collectors.collectingAndThen(
        Collectors.toList(),
        Collections::unmodifiableList
    )
);
Где это может пригодиться? – Возвращаете коллекцию из метода и не хотите, чтобы кто-то её изменял – Хотите обернуть результат в Optional, Set, Map, EnumMap и т.д. – Нужно после сбора в Stream ещё что-то сделать над результатом (например, отсортировать, фильтровать, обернуть) Ещё пример:

Optional<String> maxName = people.stream()
    .map(Person::getName)
    .collect(Collectors.collectingAndThen(
        Collectors.maxBy(Comparator.naturalOrder()),
        Optional::ofNullable
    ));
Этот метод часто остаётся в тени, но он может существенно упростить код и сделать его чище. Попробуйте использовать его в своём проекте 😉 👉@BookJava

💡Совет: @TransactionalEventListener — это специализированная версия @EventListener, которая прослушивает событие и ждёт заве
💡Совет: @TransactionalEventListener — это специализированная версия @EventListener, которая прослушивает событие и ждёт завершения текущей транзакции, прежде чем сработать. Ожидание согласованного состояния базы данных позволяет безопаснее реагировать на изменения, внесённые в БД ✨ #Java #springboot 👉@BookJava

Подборка Telegram каналов для программистов https://t.me/bash_srv Bash Советы https://t.me/win_sysadmin Системный Администратор Windows https://t.me/lifeproger Жизнь программиста. Авторский канал. https://t.me/devopslib Библиотека девопса | DevOps, SRE, Sysadmin https://t.me/rabota1C_rus Вакансии для программистов 1С Системное администрирование 📌 https://t.me/sysadmin_girl Девочка Сисадмин https://t.me/srv_admin_linux Админские угодья https://t.me/linux_srv Типичный Сисадмин https://t.me/linux_odmin Linux: Системный администратор https://t.me/devops_star DevOps Star (Звезда Девопса) https://t.me/i_linux Системный администратор https://t.me/linuxchmod Linux https://t.me/sys_adminos Системный Администратор https://t.me/tipsysdmin Типичный Сисадмин (фото железа, было/стало) https://t.me/sysadminof Книги для админов, полезные материалы https://t.me/i_odmin Все для системного администратора https://t.me/i_odmin_book Библиотека Системного Администратора https://t.me/i_odmin_chat Чат системных администраторов https://t.me/i_DevOps DevOps: Пишем о Docker, Kubernetes и др. https://t.me/sysadminoff Новости Линукс Linux 1C разработка 📌 https://t.me/odin1C_rus Cтатьи, курсы, советы, шаблоны кода 1С https://t.me/DevLab1C 1С:Предприятие 8 Программирование C++📌 https://t.me/cpp_lib Библиотека C/C++ разработчика https://t.me/cpp_knigi Книги для программистов C/C++ https://t.me/cpp_geek Учим C/C++ на примерах Программирование Python 📌 https://t.me/pythonofff Python академия. Учи Python быстро и легко🐍 https://t.me/BookPython Библиотека Python разработчика https://t.me/python_real Python подборки на русском и английском https://t.me/python_360 Книги по Python Rus Java разработка 📌 https://t.me/BookJava Библиотека Java разработчика https://t.me/java_360 Книги по Java Rus https://t.me/java_geek Учим Java на примерах GitHub Сообщество 📌 https://t.me/Githublib Интересное из GitHub Базы данных (Data Base) 📌 https://t.me/database_info Все про базы данных Мобильная разработка: iOS, Android 📌 https://t.me/developer_mobila Мобильная разработка https://t.me/kotlin_lib Подборки полезного материала по Kotlin Фронтенд разработка 📌 https://t.me/frontend_1 Подборки для frontend разработчиков https://t.me/frontend_sovet Frontend советы, примеры и практика! https://t.me/React_lib Подборки по React js и все что с ним связано Разработка игр 📌 https://t.me/game_devv Все о разработке игр Библиотеки 📌 https://t.me/book_for_dev Книги для программистов Rus https://t.me/programmist_of Книги по программированию https://t.me/proglb Библиотека программиста https://t.me/bfbook Книги для программистов https://t.me/books_reserv Книги для программистов БигДата, машинное обучение 📌 https://t.me/bigdata_1 Data Science, Big Data, Machine Learning, Deep Learning Программирование 📌 https://t.me/bookflow Лекции, видеоуроки, доклады с IT конференций https://t.me/coddy_academy Полезные советы по программированию https://t.me/rust_lib Полезный контент по программированию на Rust https://t.me/golang_lib Библиотека Go (Golang) разработчика https://t.me/itmozg Программисты, дизайнеры, новости из мира IT https://t.me/php_lib Библиотека PHP программиста 👨🏼‍💻👩‍💻 https://t.me/nodejs_lib Подборки по Node js и все что с ним связано https://t.me/ruby_lib Библиотека Ruby программиста QA, тестирование 📌 https://t.me/testlab_qa Библиотека тестировщика Шутки программистов 📌 https://t.me/itumor Шутки программистов Защита, взлом, безопасность 📌 https://t.me/thehaking Канал о кибербезопасности https://t.me/xakep_2 Хакер Free Книги, статьи для дизайнеров 📌 https://t.me/ux_web Статьи, книги для дизайнеров Математика 📌 https://t.me/Pomatematike Канал по математике https://t.me/phis_mat Обучающие видео, книги по Физике и Математике Excel лайфхак📌 https://t.me/Excel_lifehack https://t.me/tikon_1 Новости высоких технологий, науки и техники💡 https://t.me/mir_teh Мир технологий (Technology World) Вакансии 📌 https://t.me/sysadmin_rabota Системный Администратор https://t.me/progjob Вакансии в IT

💡 Collection vs List в Java: в чём разница и когда что использовать Сегодня разберёмся с одним из самых популярных вопросов у джавистов: чем отличается Collection от List и когда что применять. 🔹 Collection — это базовый интерфейс всех коллекций в Java. Он описывает общие операции: add(), remove(), size(), contains() и т.д. 🔹 List — это подинтерфейс Collection, предназначенный для работы с упорядоченными списками. Дополнительно даёт методы: get(index), set(index, value), indexOf(), add(index, value). 🔧 Пример с Collection:

Collection<String> names = new ArrayList<>();
names.add("Alice");
names.add("Bob");

for (String name : names) {
    System.out.println(name);
}
Здесь важно только наличие элементов — порядок и индексы не важны. 🔧 Пример с List:

List<String> cities = new ArrayList<>();
cities.add("Moscow");
cities.add("Berlin");
cities.add(1, "Paris");

System.out.println(cities.get(1)); // Paris
В этом случае нужен порядок и доступ по индексу — значит, выбираем List. 📌 Когда использовать что: - Используй Collection, если хочешь абстрагироваться от конкретной структуры и не используешь индексы. - Используй List, если: - важен порядок добавления, - нужен доступ по индексу, - требуется вставка в определённое место. 🧠 Совет: При проектировании методов или API лучше принимать Collection — так ты не ограничиваешь пользователя в реализации. А если внутри метода тебе нужны индексы — переходи на List. 👉@BookJava

🦾 Тест по Java 🦾 📌Пройдите тест из 20 вопросов и проверьте, насколько вы готовы к обучению на углубленном курсе «Java Deve
🦾 Тест по Java 🦾 📌Пройдите тест из 20 вопросов и проверьте, насколько вы готовы к обучению на углубленном курсе «Java Developer. Professional» от OTUS. Сможете сдать - пройдете на курс по спеццене! 👩‍💻 В программе курса — все актуальные инструменты, необходимые Middle+ разработчику на Java. Возможна рассрочка. ⏰ Время прохождения теста ограничено 30 минут 👉ПРОЙТИ ТЕСТ Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576

🧵 Как правильно логировать ошибки в Java-приложении Привет, друзья! Сегодня я расскажу о простой, но критически важной теме — логирование ошибок. Часто вижу, как разработчики либо совсем не логируют исключения, либо делают это неправильно. В итоге: баг есть, а откуда он взялся — непонятно. Вот пара реальных примеров: ❌ Плохо:

try {
    doSomething();
} catch (Exception e) {
    System.out.println("Error happened");
}
Хорошо:

private static final Logger logger = LoggerFactory.getLogger(MyClass.class);

try {
    doSomething();
} catch (Exception e) {
    logger.error("Failed to do something", e);
}
💡 Почему это важно: - logger.error позволяет видеть стек исключения, а это ключ к диагностике. - Можно использовать logger.warn или logger.info в зависимости от уровня важности. - Хороший лог помогает быстро локализовать проблему на проде без дебага. 🎯 Совет: Используйте Slf4j в связке с Logback или Log4j2. И обязательно следите за форматом логов — например, логируйте traceId, userId, requestId и другие полезные метаданные. А вы как логируете ошибки у себя в проекте? Делаете свою обёртку? Используете AOP? 👇 Делитесь в комментариях! 👉@BookJava

📕 Открытый урок по разработке веб-приложений на Scala На открытом уроке 1 апреля в 20:00 мск мы погрузимся в мир бэкенд-разр
📕 Открытый урок по разработке веб-приложений на Scala На открытом уроке 1 апреля в 20:00 мск мы погрузимся в мир бэкенд-разработки на Scala. 📗 В результате вы: — Узнаете ключевые аспекты создания современных веб-приложений на Scala; — Познакомитесь с популярными фреймворками и инструментами для работы с базами данных; — На практике создадите простое CRUD-приложение для закрепления навыков. Спикер: Алексей Воронец — руководитель разработки департамента проектных решений и поисковых систем в компании Naumen, эксперт с 14-летним опытом, специализирующийся на Scala и функциональном программировании. 👉 Регистрируйтесь прямо сейчас, чтобы не пропустить мероприятие https://vk.cc/cKbqwh Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576

Docker и Spring Boot микросервис (Быстрый старт) Разберем основные понятия докера и запустим spring boot микросервис в докере 00:00 Intro 00:58 Установить докер 02:05 Развитие виртуализации 09:30 Компоненты Docker 11:25 Docker Daemon 11:50 Dockerfile 12:42 Docker Image 13:12 Docker Registry 13:45 Docker Container 14:00 Dockerhub 14:57 Практика. Пишем микросервис 17:30 Практика. Пишем dockerfile 23:25 Практика. Создаем docker образ 25:48 Практика. Запускам docke контейнер 27:19 Практика. Основные команды 30:00 Best practice. Как еще можно написать dockerfile 33:14 Best practice. Рекомендации 35:01 Итог источник 👉@BookJava

Пишем рекомендательную систему музыки на Java Андрей Кузнецов — Мастер-класс Машинное обучение обычно рассматривают как отдельно стоящую область, требующую специфических знаний. Однако на практике бывает, что для решения бизнес-задач может быть достаточно и простых решений, имплементация которых не представляет сложностей для разработчика. Используя открытый датасет, мы пишем с нуля на Java рекомендательную систему музыки и разберем, какие из наивных решений могут не сработать в реальных системах. На примере технологий Одноклассников спикер рассказывает, как решаются ML-задачи в гетерогенных продакшенах, где необходимо использовать вместе Java и Python. Мастер-класс будет интересен разработчикам, которым интересна тема машинного обучения, но они либо еще не погружались в нее, либо сделали самые первые шаги. источник 👉@BookJava

⚡️👩‍💻 Хотите освоить Java с нуля и стать востребованным разработчиком? Это один из самых популярных языков программирования
⚡️👩‍💻 Хотите освоить Java с нуля и стать востребованным разработчиком? Это один из самых популярных языков программирования, который используется в крупных компаниях по всему миру. 🦾 Курс «Специализация: Java-разработчик» — это три ступени обучения, которые помогут вам пройти путь от новичка до востребованного Middle-разработчика. Вы научитесь создавать серверные приложения, работать с базами данных, осваивать Spring, Docker, Kubernetes и многое другое. Обучение ведут практикующие эксперты, программа адаптирована для новичков, а диплом OTUS котируется в ведущих IT-компаниях. Наш партнер — СберКорус, разработчик передовых цифровых решений! Осталось всего несколько дней, чтобы записаться на курс и получить скидку. 👉 Успейте оставить заявку прямо сейчас: https://vk.cc/cKaEMl Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576

🔧 Как ускорить сборку Maven проекта в 3 раза Сегодня покажу пару приёмов, которые помогут тебе значительно ускорить сборку Maven проекта. Особенно полезно, если ты работаешь с большими монолитами или частыми CI/CD прогонками. 🚀 1. Включи параллельную сборку Добавь флаг -T (thread count), чтобы Maven собирал модули параллельно:

mvn clean install -T 1C
1C — это количество потоков = количеству ядер CPU. Можешь указать, например, -T 4 для 4 потоков. Эффект — сборка может стать в 2–4 раза быстрее. 🧹 2. Пропускай тесты, если они не нужны Когда работаешь над UI, версткой или конфигурацией:

mvn clean install -DskipTests
⚠️ -DskipTests — пропускает *и* компиляцию тестов, и сами тесты. Если хочешь только не запускать тесты, используй:

mvn clean install -Dmaven.test.skip=false -DskipTests=true
📦 3. Используй mvn dependency:go-offline Это скачает все зависимости, плагины и сделает тебя независимым от интернета:

mvn dependency:go-offline
Полезно для CI и работы в поезде ✈️ 👉@BookJava

Хранилище файлов. Java + WebDav Java + WebDav - загружаем файл на webdav через Rest запрос. 00:00 Приветствие 00:34 Spring Init 00:55 Docker Hub 01:54 docker-compose 04:25 webdav.conf 06:00 application.yaml 06:50 Sardine 07:36 WebDavConfig 09:15 WebConfig 11:40 FileService 14:09 Controller 17:22 Docker Fix 17:47 Postman 18:16 что не так? 20:46 Подписывайтесь источник 👉@BookJava

👩‍💻 Rate-limiter. Bucket4j Приглашаем на открытый урок. 🗓 24 марта в 20:00 МСК 🆓 Бесплатно. Урок в рамках старта курса «J
👩‍💻 Rate-limiter. Bucket4j Приглашаем на открытый урок. 🗓 24 марта в 20:00 МСК 🆓 Бесплатно. Урок в рамках старта курса «Java Developer. Professional». Продолжаем изучать библиотеки обеспечения устойчивости приложений. На примере Bucket4j посмотрим устройство распределенного Rate-limiter-а. О чём поговорим: ✔️ Познакомимся с библиотекой Bucket4j. ✔️ Узнаем основные принципы действия и сценарии применения. Кому будет интересно: Вебинар будет полезен Java-разработчикам, архитекторам ПО и инженерам по устойчивости систем, заинтересованным в эффективном управлении потоками запросов и защите приложений от перегрузок. 🔗 Ссылка на регистрацию: https://vk.cc/cJUU0G Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576

Совет💡: если ты обожаешь Ctrl + C и Ctrl + V, тебе точно понравится и Ctrl + W. Это как выделение текста с помощью AI 😉 https://www.jetbrains.com/help/idea/working-with-source-code.html#editor_code_selection 👉@BookJava

Что такое synchronized? synchronized — это ключевое слово в Java, которое используется для управления доступом к критическим секциям кода при многопоточном выполнении. Оно гарантирует, что только один поток может выполнить блок кода или метод в определённый момент времени. Зачем нужен synchronized? Когда несколько потоков обращаются к общим данным (например, к переменной, коллекции, объекту), может возникнуть состояние гонки (race condition), приводящее к некорректной работе программы. Чтобы этого избежать, и используется synchronized. Как работает? synchronized блокирует объект или класс, чтобы другие потоки не могли войти в синхронизированную секцию, пока текущий поток её не покинет. Примеры 🔹 Синхронизация метода (экземпляра):

public synchronized void increment() {
    count++;
}
Этот метод можно вызвать только одному потоку в момент времени на одном экземпляре объекта. 🔹 Синхронизация блока кода:

public void increment() {
    synchronized (this) {
        count++;
    }
}
🔹 Синхронизация по классу (для статических данных):

public static synchronized void increment() {
    staticCount++;
}
или

synchronized (MyClass.class) {
    staticCount++;
}
Важно помнить: - synchronized влияет на производительность, т.к. вызывает блокировки. - Не стоит использовать его без необходимости — иногда лучше использовать более тонкие механизмы, например, java.util.concurrent.locks.Lock или атомарные классы (AtomicInteger и т.д.). - Ошибки синхронизации могут приводить к deadlock'ам, если неправильно проектировать взаимные блокировки. 👉@BookJava

🤝 Если код работает, это еще не значит, что он работает эффективно. Хотите разобраться, как ускорить приложения, найти утечк
🤝 Если код работает, это еще не значит, что он работает эффективно. Хотите разобраться, как ускорить приложения, найти утечки памяти и правильно деплоить их в облака? 🦾 На повышении квалификации «Java Developer. Advanced» вы изучите JVM на глубоком уровне, научитесь профилировать приложения, оптимизировать их под высокие нагрузки и выстраивать продвинутый мониторинг. ✔️ Глубокое погружение в устройство JVM ✔️ Практика с профилированием и трассировкой ✔️ Работа с Kubernetes, Prometheus и Grafana ✔️ Настройка метрик и логирования Осталось несколько дней до закрытия набора. ➡️ Пройдите короткое тестирование для проверки своих навыков и присоединяйтесь к группе: https://vk.cc/cJT8Ny 🎁 Начните обучение со скидкой, подробности у менеджеров. ПРОМОКОД: JAVA_03 Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576

📌 Почему Optional не стоит использовать в качестве параметра метода? Сегодня разберем один из популярных вопросов: можно ли использовать Optional в параметрах метода? Казалось бы, это удобный способ передавать необязательный аргумент, но есть нюансы. 🚫 Почему это плохая практика? 1️⃣ Усложнение API Когда метод принимает Optional, это вынуждает вызывающий код создавать Optional.of(value), даже если он не использует Optional в своем контексте. Это добавляет лишнюю работу. 2️⃣ Неявность кода Если метод принимает Optional, становится неясно, можно ли просто передать null или обязательно использовать Optional.empty(). 3️⃣ Снижение читаемости и удобства Обычное условие if (param != null) проще и понятнее, чем if (param.isPresent()). 4️⃣ Не поддерживается стандартом Java API В JDK не встретишь API, где Optional используется как параметр метода. Это не случайность — так принято по соглашению. ✅ Как правильно? Используйте обычные перегруженные методы или @Nullable аннотацию:

public void process(String value) { 
    // обработка значения
}

public void process() { 
    process("default");
}
Если параметр действительно может быть null, то лучше явно работать с null, чем принудительно оборачивать его в Optional. 👉@BookJava