【发布时间】:2019-12-30 14:44:16
【问题描述】:
我想利用 java 8 optional 来验证接收到的对象的值(作为响应)。我很想知道,如果按照以下方式进行操作是不好的做法。
Optional.ofNullable(response)
.map(Response::getStatus)
.filter(status -> {
if (status == Status.REJECTED)
throw new RequestRejectedException("some exception");
else if (status == Status.LOCKED)
throw new ResourceLockedException("some other exception");
return true;
})
.orElse(Status.UNAVAILABLE);
想知道,如果这样写类似上面的东西是否可以接受,或者是否有更好的方法,请提出建议。
【问题讨论】:
-
对控制流使用异常是一个热门话题,有人说这是一种不好的做法,另一些人说这很好,因为它更简单......我的建议,如果你在代码中使用控制流之类的异常它,如果没有尝试使用 return false。
-
@Adrian 我相信我理解 Optional 的主要目标,但我的问题更多是关于使用 filter() 验证 Optional 包裹的值以及如果抛出异常是否违反任何规定从那里。您提供的链接实际上并没有回答我的问题。
-
status == 'rejected'不是有效的 Java,即使status是String,但看起来Status是enum... -
你为什么最后打电话给
.orElse(Status.UNAVAILABLE);?你真的在使用返回的状态吗?
标签: java exception java-8 filtering optional