Классическая ошибка, которую порой делают даже опытные разработчики:
Optional<User> user = userRepository.findById(id);
return user.get(); // 💀 NoSuchElementException если пусто
Правильно — используй альтернативы:
// Дефолтное значение
user.orElse(User.guest())
// Ленивое создание дефолта (если создание дорогое)
user.orElseGet(() -> userService.createDefault())
// Своё исключение с контекстом
user.orElseThrow(() -> new UserNotFoundException(id))
// Выполнить действие только если есть значение
user.ifPresent(u -> eventBus.publish(new UserLoadedEvent(u)))
Optional.get() — это тот же NPE, только под другим соусом. Optional нужен именно для того, чтобы явно обработать отсутствие значения.
Если пишешь get(), спроси себя: а зачем тут вообще Optional?
══════ Навигация ══════
Вакансии • Задачи • Собесы
🐸 Библиотека джависта
#CoreJava