中医协会网站建设方案,南宁企业网站制作模板,门户网站模式,最新版wordpress背景orelseJava 8引入了一个很棒的Optional概念#xff0c;我们在博客Java 8 Optional中进行了研究 。 因此#xff0c;为了简要说明一下#xff0c;Optional用于表示Optional对象或空值#xff0c;而不是null引用。 这将有助于避免在我们尝试对空引用对象执行某些操作时发生空… orelse Java 8引入了一个很棒的Optional概念我们在博客Java 8 Optional中进行了研究 。 因此为了简要说明一下Optional用于表示Optional对象或空值而不是null引用。 这将有助于避免在我们尝试对空引用对象执行某些操作时发生空指针异常。 为了从可选对象访问值 很少有诸如getorELseorElseGet之类的方法。每当我们查看orElse与orElseGet方法时我们总是会感到困惑。 有什么区别以及何时使用哪种方法 当我们概述这些方法时我们认为可以使用orElsefunctionCall代替orElseGetClass :: functionDef它将获得相同的结果。 那么为什么需要创建两种不同的方法呢 直截了当的答案是行为存在差异并且在表现情况下它们会产生巨大差异。 让我们在此博客中详细查看其每个行为。 orElse与orElseGet的语法 OrElse方法采用一个参数如果可选参数没有值则将返回该参数。 OrElseGet方法需要一个函数如果可选选项没有值则该函数将被执行以返回值。 这表明orElse方法需要一个值而orElseGet方法需要提供者的功能。 如果我们将函数传递给orElse方法它将始终在执行语句之前执行以适合语法。 但是在orElseGet方法的情况下我们无法传递值并且仅当可选参数没有值时才执行该函数。 区别orElse与orElseGet 如果optional为null我们将使用以下函数获取值 public String getFunctionForTest() { System.out.println( \n function called ); return default value ; } 让我们来看看Optional对象具有空值的情况 public void orElseVSorElseGet() { OptionalString optional Optional.ofNullable(null); String orElseGetResult optional.orElseGet( this ::getFunctionForTest); System.out.println( value in orElseGetResult orElseGetResult); String orElseResult optional.orElse( this .getFunctionForTest()); System.out.println( value in orElseResult orElseResult); } 输出 function called value in orElseGetResult default value function called value in orElseResult default value 正如我们看到的那样该期权没有价值我们需要采取其他形式的价值。 因此正如预期的那样在两种情况下都会调用该函数。 现在让我们举一个例子我们在可选对象中有值我们不需要执行其他部分 public void orElseVSorElseGet() { OptionalString optional Optional.ofNullable( value found ); String orElseGetResult optional.orElseGet( this ::getFunctionForTest); System.out.println( value in orElseGetResult orElseGetResult); String orElseResult optional.orElse( this .getFunctionForTest()); System.out.println( value in orElseResult orElseResult); } 输出 value in orElseGetResult default value function called value in orElseResult default value 我们知道选项对象具有值因此我们不需要将价值形式取为其他部分。 因此我们希望不应执行该功能。 但是在orElse方法的情况下执行了该功能。 在上面的示例中我们可能没有注意到性能差异但是当我们有复杂的过程来采用默认值时它将影响性能。 您可以考虑需要数据库或网络调用以获取默认值的示例即使您有值它也会变慢。 在这种情况下最好使用orElseGet方法。 在orElse的情况下即使存在值也将计算其他部分。 如果我们有默认的静态值那么orElse是一个不错的选择。 如果您需要默认值的计算逻辑则应使用orElseGet。 快速阅读 可选的OrElse方法采用参数 可选中的OrElseGet方法需要供应商函数 在orElse方法的情况下即使存在值也要计算其他部分 如果是orElseGet方法则只有在Optional对象为空时才计算else部分 对于固定值或应使用Else方法 如果需要在运行时计算值则应使用orElseGet 相关话题 Java 8可选细节 Java 8功能 Lambda表达式Java 8 翻译自: https://www.javacodegeeks.com/2020/07/optional-orelse-vs-orelseget.htmlorelse