0

我有一个返回Optional. get()如果调用者在不存在可选值时执行 a ,我想自定义引发的异常,以包含一些上下文信息。目前Absent.get()将简单throw new IllegalStateException("value is absent");(并且它被非常整齐地锁定!)。

这里有建议的最佳实践吗?

我想象的是类似于 an 的东西,它在异常Optional.absentThrowing(String message)中返回带有自定义消息的 - 可能还有变体采用和/或. 这将允许以下代码:AbsentSupplier<? 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");

这也可以用于调用方,为 Guava 的可选使用的快捷方式提供解决方案,但有例外?没有在那篇文章中提出的反射或复杂性反对意见:

optional.or(Optional.absentThrowing("no soup for you")).get()

好主意?馊主意?根本不值得吗?

4

1 回答 1

0

为什么我们应该有 Optional.absentThrowing("out of soup");

我们不能只抛出相应的异常吗?嗯。像那样:

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

我认为最好抛出一个特定的异常,因为它会更直观地知道出了什么问题。并且 IllegalStateException 并不适用于所有情况。

于 2013-09-20T12:00:29.097 回答