我有一个返回Optional
. get()
如果调用者在不存在可选值时执行 a ,我想自定义引发的异常,以包含一些上下文信息。目前Absent.get()
将简单throw new IllegalStateException("value is absent");
(并且它被非常整齐地锁定!)。
这里有建议的最佳实践吗?
我想象的是类似于 an 的东西,它在异常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");
这也可以用于调用方,为 Guava 的可选使用的快捷方式提供解决方案,但有例外?没有在那篇文章中提出的反射或复杂性反对意见:
optional.or(Optional.absentThrowing("no soup for you")).get()
好主意?馊主意?根本不值得吗?