Mediumoptionaljava8

Что такое Optional в Java?

1Постановка

Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.

2Решение

Optional<T> (Java 8) — контейнер, который содержит значение T или пуст. Цель — явно выразить в сигнатуре возможное отсутствие значения и заставить caller обработать это.

Optional<String> findName(int id) {
    return id > 0 ? Optional.of("user" + id) : Optional.empty();
}

// Хорошо: цепочка с дефолтом
String name = findName(1).orElse("unknown");
int len = findName(1).map(String::length).orElse(0);

// Плохо: isPresent + get — лучше map/orElse
if (findName(1).isPresent()) { String n = findName(1).get(); }
  • Создание: Optional.of(x) (x ≠ null), Optional.ofNullable(x), Optional.empty();
  • Избегать get() (бросает NoSuchElementException) — использовать orElse, orElseThrow;
  • Не использовать для полей класса (serialization, overhead), только для возвращаемых значений.

3Как отвечать

  • Сначала уточните условия и ограничения, покажите аналитическое мышление.
  • Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
  • Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡

На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.