我有一个返回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()
好主意?馊主意?根本不值得吗?
答案 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并不适用于所有情况。