У меня есть метод, который возвращает Optional
. Я хотел бы настроить созданное исключение, если вызывающий абонент делает get()
, когда необязательное значение отсутствует, чтобы включить некоторую контекстную информацию. В настоящее время Absent.get()
будет просто throw new IllegalStateException("value is absent");
(и он очень аккуратно заперт!).Предоставление пользовательского сообщения об отсутствии в Guava Optional.get()
Есть ли здесь рекомендуемая практика?
Что я представляю себе это нечто вроде Optional.absentThrowing(String message)
, который возвращает Absent
с настраиваемым сообщением в исключении - и, возможно, варианты с Supplier<? extends String>
и/или Supplier<? extends IllegalStateException>
. Это позволило бы код, такой как:
if (kitchen.isOpen()) {
if (soupQ.isEmpty()) {
return Optional.absentThrowing("out of soup");
}
return Optional.of(soupQ.remove());
}
return Optional.absentThrowing("kitchen closed");
Это также может быть использован абоненте стороне, дающую решение Shortcut for Guava's Optional use with exceptions?, которое не имеет отражения или сложности возражения на этот пост:
optional.or(Optional.absentThrowing("no soup for you")).get()
Хороший идея? Плохая идея? Просто не стоит?
Мне не нужен метод, который возвращает 'Необязательно', чтобы сразу же выбросить ошибку. Он должен только бросать, если вызывающий пытается получить доступ к содержимому пустого 'Optional'. То есть, вызывающий может решить, разрешено ли в данном случае отсутствовать значение «Факультативный». –