Лучшая практика: использование Java 8 по желанию или исключение - PullRequest
0 голосов
/ 05 февраля 2019

Java 8 представила Optional API для обозначения значений, которые могут быть null во время выполнения.В следующих случаях лучше выдавать проверенное исключение или возвращать Optional возвращаемый тип для представления крайнего случая?

Случай 1: Возвращаемый тип Optional

private Optional<Item> getItem(String itemName)
{
    for (Item item : items)
    {
        if (item.getName().equals(itemName))
            return Optional.of(item);
    }

    return Optional.empty();
}

Случай 2: Бросать проверенное исключение

  private Item getItem(String itemName) throws ItemNotFound
   {
        for (Item item : items)
        {
            if (item.getName().equals(itemName))
                return item;
        }

        throw new ItemNotFound();
   }

Как утверждает Мартин Фаулер, Optional / Шаблон особого случая - лучшая практика, но в этом простом сценарии бросать проверенное исключение тоже делает свою работу.

Чтоя должен следовать?

Ответы [ 2 ]

0 голосов
/ 05 февраля 2019

Все просто:

  • Если null является условием ошибки, генерировать исключение.
  • Если null является допустимым возвращаемым значением, вернуть пустое значение Optional.
0 голосов
/ 05 февраля 2019

Это в основном сводится к следующему: имеет ли смысл этот вариант использования для пропуска элемента?

Допустим, приложение имеет пользователей.Пользователь может добавить номер телефона к своей учетной записи.Поскольку его склонный номер не должен быть там, вы можете использовать по желанию.Номер телефона может быть там, но может отсутствовать.Код клиента должен обрабатывать необязательное / обнуляемое значение.

С другой стороны, если я хочу посмотреть его электронную почту, что является обязательным при регистрации.Тогда исключением является путь.Электронная почта должна быть там, но нет.Здесь клиентский код сталкивается с недопустимым состоянием приложения / поврежденным пользователем.

...