当前位置: 首页 > 知识库问答 >
问题:

Java可选和orElse[重复]

葛烨
2023-03-14
String t = null;
Optional.ofNullable("notnull")
    .orElse(
        Optional.ofNullable(t).orElseThrow(() -> new Exception("MyException"))
    );

为什么这段代码会抛出异常?为什么它还要去“奥雷尔斯”分店?

这是因为某种怪异的处决令吗?那么在计算orElse分支之前没有设置第一个可选项的值?

共有1个答案

吕岳
2023-03-14

从不调用orelse流,而是执行方法本身。这意味着方法参数也传递给它。因此,无论传递给第一个optional.ofnullable调用的值是什么,都将调用optional.ofnullable(t).orelseThrow(()->new Exception(“myexception”)部分。

如果您不希望发生这种情况,您需要传递供应商,如下所示:

String t = null;
Optional.ofNullable("notnull")
    .orElseGet(
        () -> Optional.ofNullable(t).orElseThrow(() -> new RuntimeException("MyException"))
    );

只有在调用orelseget流时才调用供应商。请注意,您需要runtimeexception而不是checked exception,以便能够从供应商中断。

 类似资料:
  • 我一直在使用Java 8中的新的可选类型,我遇到了一个似乎不受功能支持的常见操作:“orelseoptional” 请考虑以下模式: 这种模式有很多种形式,但归结起来就是在一个可选项上需要一个“orelse”,该“orelse”接受一个函数,生成一个新的可选项,只有当当前的可选项不存在时才调用。 它的实现如下所示: 我很好奇这样一种方法不存在的原因,如果我只是在一种无意的方式下使用Optional

  • 在Optional while Optional.orElse方法被调用时,无论元素是否存在,都不执行orElse部分,它的行为不像if else条件那样。 在下面的代码中,如果您在案例1中看到getNullPoJo和getDefaultPoJo都被执行,因为getNullPoJo将返回空的可选的 当前输出为: 正在执行getNullPoJo 执行getDefaultPoJo pojo1获得默认值

  • 问题内容: Java中是否有一种优雅的流式处理方式,可以说“如果此Optional映射到具有计算值的另一个Optional,如果该值存在,则返回一个空的Optional”? 我想到了类似的东西: 但这是不可能的。 我想出的解决方案有些冗长,而不像流式: 问题答案: 您不需要以下子句:

  • 我已经编码好了: 问题是返回一个。 因此,我得到了以下信息: 方法

  • 问题内容: 所以我正在与Optionals一起工作,并且遇到了一种奇怪的行为。我想知道这是否真的是意向性的“功能”或其他…奇特的… 这是给定的示例:我有一个带有Optional的方法,在其中我要评估另一个Optional的方法。如果其他Optional不存在,我将引发IllegalArgumentException: 现在,如果the 为空的Optional,即使存在,它也会引发IllegalAr

  • 我有以下代码,它应该从modelService返回orgId,但不能使用可选的 此代码不起作用总是返回 但是下面的代码工作得很好,不知道上面的代码有什么问题 其中总是,这是正确的代码,我只更改了一些变量名