2013-08-30 3 views
0

У меня есть метод, который возвращает 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() 

Хороший идея? Плохая идея? Просто не стоит?

ответ

0

Почему у нас должен быть Optional.absentThrowing («из супа»);

Не можем ли мы просто выбросить соответствующее исключение? Что-л. как то:

if (kitchen.isOpen()) { 
    if (soupQ.isEmpty()) { 
    return throw new IllegalStateException("out of soup"); 
    } 
return Optional.of(soupQ.remove()); 
} 
return throw IllegalStateException("kitchen closed"); 

Я думаю, что лучше бросить конкретное исключение, как это будет более понятным, что было неправильным. И IllegalStateException не подходит для всех случаев.

+0

Мне не нужен метод, который возвращает 'Необязательно', чтобы сразу же выбросить ошибку. Он должен только бросать, если вызывающий пытается получить доступ к содержимому пустого 'Optional'. То есть, вызывающий может решить, разрешено ли в данном случае отсутствовать значение «Факультативный». –

Смежные вопросы