TGViewer
Java: fill the gaps Java: fill the gaps @java_fillthegaps · 12.3K subscribers
Post #559 14.4K
5 ошибок при использовании Optional

Optional — супер удобный инструмент, который появился в java 8. В документации его цель явно обозначена — показать, что результат вызова метода может отсутствовать.

Например, функция поиска может найти нужный элемент, а может и не найти. В этой ситуации отлично подойдёт Optional:
Optional<String> search();


С виду всё просто и понятно.

Тем не менее, на практике Optional часто используется некорректно, код получается сложным или плохо читаемым. Самые популярные ошибки:

1️⃣ Использовать Optional во входных параметрах и конструкторах
❌ void init(Optional<String> value) {…}

Приходится добавлять лишние обёртки и проверки.

✅ Лучше проверять параметры на null в начале метода:
void init (String value) {
if (value == null) …
}


2️⃣ Возвращать Optional при наличии дефолтного значения
❌ return Optional.ofNullable(value).orElse("default");
✅ return value == null ? "default" : value;


3️⃣ Обрабатывать Optional не сразу
и тащить его далеко по коду. Идеально, если обработка происходит сразу после возвращения из метода:
Optiona<String> valueOpt = …
String value = valueOpt.orElse("default");


4️⃣ Возвращать Optional для коллекций
❌ public Optional<List<Integer>> search(…)


Если элементов нет, верните пустой список:
✅ public List<Integer> search(…) {
… return List.of();
}


5️⃣ Неоптимальная работа с примитивами
Для int, long и double есть специальные классы: OptionalInt, OptionalDouble и OptionalLong.

У них нет затрат на создание объекта, а код становится чуть короче и понятнее. Методов меньше, чем в классическом Optional, но при интенсивной работе с примитивами возможен прирост производительности.

Ответ на вопрос перед постом

Входные параметры лучше проверять внутри метода:
❌ List<Student> search(Optional<String> city)
❌ void init(Optional<String> conf)


Лучше вернуть пустой список, если элементов нет:
❌ Optional<List<Student>> all()
  • 🔥 164
  • 👍 103
  • 👎 19
  • ❤ 16
More from @java_fillthegaps
  1. Apr 30, 2026Get Your Hands Dirty on Clean Architecture: отзыв на книгу Когда я подняла тему чистой арх…
  2. Apr 27, 2026​Clean Architecture: отзыв на книгу Наконец-то дочитала книгу Clean Architecture Роберта М…
  3. Mar 4, 2026Как переиспользовать контекст в интеграционных тестах Сегодня расскажу базовый минимум для…
  4. Mar 4, 2026Post #660
  5. Mar 4, 2026Тестовый контекст поднимается 2 минуты. У нас 4 класса с интеграционными тестами, их конфи…
  6. Feb 25, 2026Чистая архитектура. Главы 3-5 Продолжаем спидран по Clean Architecture Роберта Мартина. ⭐️…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →