我是Java8API的新手。我有这段代码,需要使用Java Optional进行优化。
if (Objects.nonNull(someDao.getById(id))) {
someDao.delete(id);
} else {
throw new RuntimeException();
}我尝试使用Optional.ofNullable来优化这段代码。
Optional.ofNullable(someDao.getById(id))
.ifPresent(deleteObject)
.orElseThrow(() -> new RuntimeException("some error message"));
private Consumer<SomeObject> deleteObject = someObj-> {
someDao.delete(someObj.getId());
};我收到一个错误,说"can't invoke orElseThrow on primitive type void“
如何在不使用if-else块的情况下使用Optional进行优化以同时处理数据持久性和异常处理?
发布于 2017-05-01 15:40:13
您需要在两个单独的调用中完成此操作:
Optional<SomeType> opt = Optional.ofNullable(someDao.getById(id));
opt.ifPresent(deleteObject);
opt.orElseThrow(() -> new RuntimeException("some error message"));发布于 2017-05-01 15:48:46
我认为你的if语句已经很清楚了,你不明白为什么你要把它变成一个可选的链。
话虽如此,我也没有设法在一个链中完成所有的事情:
SomeObject someObj = Optional.ofNullable(someDao.getById(id))
.orElseThrow(() -> new RuntimeException("some error message"));
someDao.delete(someObj.getId());如果Optional不为null,则.orElseThrow返回Optional中包含的值。因此您可以将其存储在SomeObject中,然后将其删除。
https://stackoverflow.com/questions/43715730
复制相似问题