Что такое Optional в Java и для чего он используется?

«Что такое Optional в Java и для чего он используется?» — вопрос из категории Java Core, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Optional — это контейнерный объект, который может содержать или не содержать ненулевое значение. Его основная цель — предоставить типобезопасный способ представления опциональных значений и избежать ошибок NullPointerException.

Основные причины использования:

  • Явно указывает, что возвращаемое значение может отсутствовать.
  • Поощряет программиста явно обрабатывать случай отсутствия значения.
  • Уменьшает количество проверок на null в коде.

Пример использования:

public Optional<String> findUserById(Long id) {
    // ... логика поиска
    return user != null ? Optional.of(user) : Optional.empty();
}

// Клиентский код безопасно обрабатывает результат
findUserById(123L)
    .ifPresentOrElse(
        name -> System.out.println("User found: " + name),
        () -> System.out.println("User not found")
    );

Важно: Optional предназначен в первую очередь для использования в качестве возвращаемого типа. Не следует использовать его для полей класса или параметров методов.