在Guava Optional.get()中缺席时给出自定义消息

时间:2013-08-30 23:10:53

标签: java guava

我有一个返回Optional的方法。如果调用者在可选值不存在时执行get(),我想自定义抛出的异常,以包含一些上下文信息。目前Absent.get()只会throw new IllegalStateException("value is absent");(它被非常巧妙地锁定!)。

这里有建议的最佳做法吗?

我想象的是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()

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

1 个答案:

答案 0 :(得分: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并不适用于所有情况。