Java 在番石榴中提供缺勤自定义消息可选。get()
我有一个返回Java 在番石榴中提供缺勤自定义消息可选。get(),java,guava,Java,Guava,我有一个返回可选值的方法。如果调用方在缺少可选值时执行get(),我想定制抛出的异常,以包括一些上下文信息。当前不存在。get()将简单地抛出新的IllegalStateException(“值不存在”)(而且锁得很整齐!) 这里有建议的最佳实践吗 我想象的是类似于可选的.absentThrowing(字符串消息)的东西,它返回一个缺席的,在异常中有一个自定义消息——并且可能是变体,使用供应商为什么我们应该有可选的.absentThrowing(“出汤”) 我们不能直接抛出相应的异常吗?Smth
可选值的方法。如果调用方在缺少可选值时执行get()
,我想定制抛出的异常,以包括一些上下文信息。当前不存在。get()
将简单地抛出新的IllegalStateException(“值不存在”)代码>(而且锁得很整齐!)
这里有建议的最佳实践吗
我想象的是类似于可选的.absentThrowing(字符串消息)
的东西,它返回一个缺席的
,在异常中有一个自定义消息——并且可能是变体,使用供应商为什么我们应该有可选的.absentThrowing(“出汤”)
我们不能直接抛出相应的异常吗?Smth。就像这样:
if (kitchen.isOpen()) {
if (soupQ.isEmpty()) {
return throw new IllegalStateException("out of soup");
}
return Optional.of(soupQ.remove());
}
return throw IllegalStateException("kitchen closed");
我认为最好抛出一个特定的异常,因为它将更直观地说明什么是错误的。非法状态异常并不适用于所有情况。我不希望返回Optional
的方法立即抛出错误。仅当调用者试图访问空可选
的内容时,它才应抛出。也就是说,调用者可以决定在给定的情况下是否允许可选的
。
optional.or(Optional.absentThrowing("no soup for you")).get()
if (kitchen.isOpen()) {
if (soupQ.isEmpty()) {
return throw new IllegalStateException("out of soup");
}
return Optional.of(soupQ.remove());
}
return throw IllegalStateException("kitchen closed");