首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将Java 8可选API用于返回void的方法调用

如何将Java 8可选API用于返回void的方法调用
EN

Stack Overflow用户
提问于 2017-05-01 15:29:58
回答 2查看 455关注 0票数 0

我是Java8API的新手。我有这段代码,需要使用Java Optional进行优化。

代码语言:javascript
复制
    if (Objects.nonNull(someDao.getById(id))) {
        someDao.delete(id);
    } else {
        throw new RuntimeException();
    }

我尝试使用Optional.ofNullable来优化这段代码。

代码语言:javascript
复制
    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进行优化以同时处理数据持久性和异常处理?

EN

回答 2

Stack Overflow用户

发布于 2017-05-01 15:40:13

您需要在两个单独的调用中完成此操作:

代码语言:javascript
复制
Optional<SomeType> opt = Optional.ofNullable(someDao.getById(id));
opt.ifPresent(deleteObject);
opt.orElseThrow(() -> new RuntimeException("some error message"));
票数 1
EN

Stack Overflow用户

发布于 2017-05-01 15:48:46

我认为你的if语句已经很清楚了,你不明白为什么你要把它变成一个可选的链。

话虽如此,我也没有设法在一个链中完成所有的事情:

代码语言:javascript
复制
SomeObject someObj = Optional.ofNullable(someDao.getById(id))
.orElseThrow(() -> new RuntimeException("some error message"));
someDao.delete(someObj.getId());

如果Optional不为null,则.orElseThrow返回Optional中包含的值。因此您可以将其存储在SomeObject中,然后将其删除。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43715730

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档