J
Java | Фишки и трюки
@java_tips_and_tricks7.0K подп.
2.2Kпросмотров
31.7%от подписчиков
3 февраля 2026 г.
Score: 2.4K
🎭 Optional.ofNullable() - как не стрелять себе в ногу NullPointerException Кажется, что Optional должен спасать от null. Но если перепутать Optional.of() с Optional.ofNullable() - получишь NPE там, где меньше всего ожидал. Это как заряжать пистолет, думая, что он игрушечный. Вот разбор, как не попасть в эту ловушку и когда что использовать 👇 📂 Шаг 1: В чём разница? (Одно слово - null) // Если value == null, то: Optional.of(value); // 🚨 Выбросит NPE Optional.ofNullable(value); // ✅ Вернёт Optional.empty() ➡️ Optional.of создаёт контейнер только для не-null значений. Optional.ofNullable - для любых, сам проверит и сделает empty() при null. 📂 Шаг 2: Где стреляет Optional.of() (реальный пример) Представь, что метод может вернуть null, а ты оборачиваешь результат в Optional для красоты: String findNameById(Long id) { // ... какой-то поиск, который может вернуть null } // Где-то в коде: Optional<String> name = Optional.of(findNameById(42)); // БАМ! NPE ➡️ Кажется, что ты делаешь «безопасный» контейнер, но of() выстрелит раньше, чем ты успеешь его использовать. Типичная ошибка при рефакторинге старого кода. 📂 Шаг 3: Правильный паттерн для оборачивания неизвестных значений // Входящее значение может быть null -> только ofNullable Optional<String> safeName = Optional.ofNullable(findNameById(42)); // Теперь можно безопасно работать String result = safeName.orElse("По умолчанию"); ➡️ ofNullable - это шлюз, который пропускает и null, и значение, превращая первое в empty(). 📂 Шаг 4: А когда тогда нужен Optional.of()? Только когда ты на 100% уверен, что значение не null. Например: // Константы, финальные строки Optional<String> env = Optional.of("PROD"); // Результаты методов, которые никогда не возвращают null по контракту Optional<String> uuid = Optional.of(UUID.randomUUID().toString()); ➡️ Используй of() как assertion - «это точно не null». Если сомневаешься - ofNullable. 📂 Шаг 5: Тест на внимательность public Optional<String> extract(boolean flag) { String value = flag ? "Java" : null; return Optional.of(value); // Что будет при flag = false? } ➡️ Правильно - NPE при вызове метода, а не пустой Optional. Эту ошибку компилятор не подскажет. 🗣 Запомни: Optional.of() - это крик «я уверен!». Если не готов ловить NPE, как пулю, всегда используй ofNullable.
2.2K
просмотров
2319
символов
Да
эмодзи
Нет
медиа

Другие посты @java_tips_and_tricks

Все посты канала →
🎭 Optional.ofNullable() - как не стрелять себе в ногу NullP — @java_tips_and_tricks | PostSniper