Java Разработка | Spring Boot Backend & Architecture. Программирование на Джава для Developer. IT Собеседования, Алгоритмы и Coding задачи. Уроки и курсы для роста в Tech.
Java Разработка | Spring Boot Backend & Architecture. Программирование на Джава для Developer. IT Собеседования, Алгоритмы и Coding задачи. Уроки и курсы для роста в Tech.
1 357 подписчиков · @bookjava
К каналу →
map() vs flatMap(): Битва трансформеров Оба метода находятся в конвейере (Intermediate operations) и нужны для преобразования данных. Но работают они с разной геометрией. 1️⃣ map…
Читать далее →
2 451
🚀 В чем разница между HashMap и Hashtable в Java? Если вы работаете с Java, то наверняка сталкивались с HashMap и Hashtable. Оба используются для хранения пар "ключ-значение", н…
Читать далее →
2 461

🎁 Optional: Лекарство от NullPointerException Тони Хоар назвал изобретение null своей "ошибкой на миллиард долларов".

🎁 Optional: Лекарство от NullPointerException

Тони Хоар назвал изобретение null своей "ошибкой на миллиард долларов". NullPointerException (NPE) -
самый частый кошмар Java-разработчика.
В Java 8 появился Optional<T> - класс-обертка, который явно говорит: "Здесь значения может и не быть".

📦 Что внутри?

Представьте Optional как коробку.

🔴 В ней может лежать объект (Non-empty).
🔴 Или она может быть пустой (Empty).

Главное правило: Никогда не возвращайте null из метода, если можно вернуть Optional.empty().

🚫 Как делать НЕ надо

Самая частая ошибка новичка, использовать Optional как старый добрый if (x != null):

Optional<User> userOpt = findUser("Alex");

// ❌ ПЛОХО: Это тот же null-check, только сложнее
if (userOpt.isPresent()) {
System.out.println(userOpt.get().getName());
}
Метод .get() - это зло. Если коробка пуста, он бросит NoSuchElementException, и вы просто поменяли шило (NPE) на мыло.

✅ Как делать НАДО (Functional Style)

Вся мощь Optional раскрывается, когда вы строите цепочки вызовов, как в стримах.

1. Если значение есть, сделай что-то (ifPresent)
findUser("Alex").ifPresent(user -> System.out.println(user.getName()));

2. Если значения нет, верни дефолт (orElse)
// Вернет юзера или создаст нового "Guest", если не нашел
User user = findUser("Alex").orElse(new User("Guest"));

3. Если значения нет — брось ошибку (orElseThrow)
User user = findUser("Alex")
.orElseThrow(() -> new IllegalArgumentException("User not found"));

4. Преобразование внутри коробки (map)
Допустим, нам нужен не сам юзер, а его email. Если юзера нет, то и email нет.

String email = findUser("Alex")
.map(User::getEmail) // Достаем email (если юзер есть)
.map(String::toUpperCase) // В верхний регистр (если email был)
.orElse("UNKNOWN"); // Если хоть на одном этапе было пусто

⚡ Золотые правила использования

1. Только для возвращаемых значений! Не используйте Optional как тип поля в классе или аргумент метода.
Это лишний оверхед и мусор в коде.

2. orElse() vs orElseGet():
🔴 orElse(new Object()) - объект создается всегда, даже если он не нужен.
🔴 orElseGet(() -> new Object()) - объект создается только если в коробке пусто (лениво). Используйте этот вариант для тяжелых объектов.


🔥 Итог

Optional спасает не тем, что убирает null, а тем, что заставляет вас явно обработать случай отсутствия значения.
Забудьте про .get(). Используйте .map(), .filter() и .orElse().

#Java #Optional #CleanCode #NoMoreNPE

👉 @BookJava
Java Records: Убийцы бойлерплейта Сколько раз вы создавали класс просто чтобы "перенести данные" из точки А в точку Б? Вы пишете 3 поля, а потом IDE генерирует вам 50 строк кода: …
Читать далее →
2 436
🔀 Switch Expressions: Прощай, break! Помните это чувство, когда забыл написать break в switch-case, и код пошел выполняться дальше, создав неуловимый баг? 😫 В современных версиях…
Читать далее →
2 429
Другие главы канала «Java Разработка | Spring Boot Backend & Architecture. Программирование на Джава для Developer. IT Собеседования, Алгоритмы и Coding задачи. Уроки и курсы для роста в Tech.»
Выберите главу, чтобы продолжить чтение
Все посты →
Глава от 17.06.2026
🔐 Bouncy Castle: Легендарная криптография для Java Если вы разрабатываете на Ja…
👁 145 просмотров
Глава от 15.06.2026
Сегодня я покажу вам простой, но мощный приём, который помогает упростить работу…
👁 329 просмотров
Глава от 11.06.2026
💡Совет: @TransactionalEventListener — это специализированная версия @EventListen…
👁 441 просмотров
Глава от 10.06.2026
💡 Collection vs List в Java: в чём разница и когда что использовать Сегодня раз…
👁 406 просмотров
Глава от 10.06.2026
👩‍💻 Контейнеризация Java-приложений с Docker Приглашаем на открытый урок. 🗓 22…
👁 413 просмотров
Глава от 09.06.2026
🧵 Как правильно логировать ошибки в Java-приложении Привет, друзья! Сегодня я р…
👁 497 просмотров
Глава от 04.06.2026
🔧 Как ускорить сборку Maven проекта в 3 раза Сегодня покажу пару приёмов, котор…
👁 684 просмотров
Глава от 02.06.2026
👩‍💻 ИИ-ассистенты уже умеют писать код, предлагать исправления и ускорять разраб…
👁 658 просмотров
Глава от 02.06.2026
Совет Spring Framework💡 Вы можете инжектировать (autowire) бины, которые могут …
👁 661 просмотров

Популярные посты канала «Java Разработка | Spring Boot Backend & Architecture. Программирование на Джава для Developer. IT Собеседования, Алгоритмы и Coding задачи. Уроки и курсы для роста в Tech.»

🚀 Подборка полезных IT каналов в Max Системное администрирование, DevOps 📌 https://max.ru/i_odmin Все для системного администратора https…
👁 2 579 просмотров
Совет по Spring Boot💡 Когда вам нужно настроить bean, предоставляемый Spring Boot, проверьте наличие интерфейсов *Customizer - велика вероя…
👁 2 577 просмотров
🚀 Подборка полезных IT каналов в Max Системное администрирование, DevOps 📌 https://max.ru/i_odmin Все для системного администратора https…
👁 2 573 просмотров
От 1 до миллиона пользователей (Масштабирование) Представьте: вы написали крутой стартап. Он крутится на дешевом сервере за $5 в месяц. Баз…
👁 2 570 просмотров
🚀 Подборка полезных IT каналов в Max Системное администрирование, DevOps 📌 https://max.ru/i_odmin Все для системного администратора https…
👁 2 569 просмотров
🚀 CI/CD: Роботы делают рутину за вас Аббревиатура состоит из двух частей, и они решают разные проблемы. 🛠 1. CI (Continuous Integration / …
👁 2 565 просмотров
🧩 Микросервисы: Укрощение хаоса (Spring Cloud) Когда у вас один сервис, всё просто. Но когда их становится 10, 20 или 50, возникают вопросы…
👁 2 554 просмотров
🚑 Global Exception Handling: Красиво падаем Представьте: пользователь запрашивает ID, которого нет. 🔴 Плохой сценарий: Сервер выплевывает …
👁 2 551 просмотров
🏗 Порождающие паттерны: Как рождаются объекты? Создать объект просто: User u = new User(). А если у объекта 20 полей? А если нам нужен толь…
👁 2 543 просмотров
🕸️ Распределенная Трассировка: Ищем "бутылочное горлышко" (Zipkin & Jaeger) Если логи это текст, а метрики это графики, то трассировка это …
👁 2 541 просмотров
🧹 Гигиена кода: Рефакторинг и Технический долг Почему проекты умирают? Не из-за плохой идеи, а из-за того, что стоимость добавления новой ф…
👁 2 535 просмотров
📦 От Кода к Продакшену: JAR и Docker В старые времена (Java EE) процесс деплоя был адом: нужно было установить на сервер Tomcat, настроить …
👁 2 535 просмотров
🏗 Структурные паттерны: Адаптер, Декоратор, Прокси Когда вы пытаетесь соединить старую библиотеку с новым кодом или добавить логирование, н…
👁 2 531 просмотров
🔎 Elasticsearch: Как найти иголку в стоге сена за 10 мс Представьте каталог на 10 миллионов товаров. Пользователь вводит в поиск: "айфон 15…
👁 2 531 просмотров
🎛 Конфигурация Spring Boot: YAML, Профили и Секреты Хардкодить настройки (порты, пароли, URL-ы) в Java-коде - это моветон. Если вам нужно п…
👁 2 530 просмотров
💾 Spring Data JPA: SQL больше не нужен? Spring Data JPA это абстракция над Hibernate (который, в свою очередь, является реализацией JPA). …
👁 2 527 просмотров
🚀 Redis + Spring Cache: Турбо-наддув для бэкенда Самая медленная часть любого приложения это ввод-вывод (I/O). Поход в базу данных (Postgre…
👁 2 527 просмотров
👮‍♂️ Spring Security: Фейсконтроль для вашего API Spring Security - это не просто библиотека, это мощный фреймворк, который встает стеной м…
👁 2 525 просмотров
☸️ Kubernetes: Оркестратор вашего зоопарка Представьте, что у вас 50 микросервисов, каждый запущен в 3 экземплярах (для надежности). Итого …
👁 2 523 просмотров
🗄️ System Design: Как не "положить" Базу Данных? В большинстве веб-приложений (например, Instagram или Twitter) соотношение чтения к записи…
👁 2 522 просмотров

Связанные темы в других каналах

Каналы из той же тематики, где часто появляются близкие сюжеты
Вся тема →
@matematik_andrei_channel
Математик Андрей
Основатель онлайн-школы «Точка Знаний» В канале: — короткие видео по темам 1-11 классов — разбор задач ВПР/ОГЭ/ЕГЭ — применение математики в жизни Получить консульта…
👥 248 549 · +45 648/7д
@obr_mo
Образование Подмосковья
Актуальные новости об образовании в Московской области: школы, колледжи, вузы, олимпиады, ЕГЭ, инициативы Министерства образования МО. Всё для учеников, родителей и педаг…
👥 79 289 · -1 615/7д
@Moscow_school
Московское образование
Успех начинается здесь! Приложение «ЗОЖ с МЭШиком» https://max.ru/meshik_app_bot Для СМИ: press-donm@mos.ru Сайт: mosobr.shkolamoskva.ru ВК: vk.com/educationdep ТГ: htt…
👥 67 317 · -877/7д
@minprosrf
Минпросвещения России
Официальный канал Министерства просвещения России. Всё об образовании для родителей, педагогов и учащихся. Сайт edu.gov.ru ВКонтакте vk.com/minprosvet Однокл
👥 55 103 · +1 789/7д
@Lingvaa
Лингвист | Русский язык Образование
Канал №1 для тех, кто звонИт, а не звОнит! По рекламе: https://clck.ru/3R7DoR Биржа: https://telega.in/c/Lingvaa
👥 53 567 · -114/7д
@id110802233432_biz
Школы РФ
Новости школьного образования для детей и родителей # дети школа школьник новости школьное образование гдз егэ огэ дневник впр оценка учителя родители Реклама: https:…
👥 44 564 · +1 915/7д
🏷 Темы и теги
#Java #Optional #CleanCode #NoMoreNPE #spring boot #java #hibernate #docker #собеседование #микросервисы #Образование
📋 О канале Java Разработка | Spring Boot Backend & Architecture. Программирование на Джава для Developer. IT Собеседования, Алгоритмы и Coding задачи. Уроки и курсы для роста в Tech.
Всё о Java Core, JVM, Multithreading и ООП. Гайды по Hibernate, Kafka, Docker, Kubernetes (K8s) и Microservices. Разбираем SQL, NoSQL и базы данных. Подготовка к интервью: Паттерны, System Design, LeetCode, Roadmap для Junior, Middle, Senior. Новости экосистемы: Kotlin, Android, Maven, Gradle, Git, CI/CD. Тестирование (JUnit, Mockito) и Best Practices разработки высоконагруженных систем.
🔍 Архив всех постов Макс
Поиск по 8,891,494 постам из 201,201 каналов
Попробовать за 1 ₽ →
Удалить пост или канал с МАКСОТЕКИ
Заявка подтверждается через бота Макс: нужно быть администратором канала и добавить бота МАКСОТЕКИ в администраторы. После проверки канал или конкретный пост скрывается с сайта.
📊 Аналитика канала «Java Разработка | Spring Boot Backend & Architecture. Программирование на Джава для Developer. IT Собеседования, Алгоритмы и Coding задачи. Уроки и курсы для роста в Tech.» ➡️ Перейти в канал Макс
Заявка в МАКСОТЕКА
Добавьте свой канал в каталог
Зарегистрируйтесь в личном кабинете и добавьте канал за пару кликов.
Перейти в личный кабинет →

Бесплатная регистрация, быстрая модерация.