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

为什么java的orElse块总是被执行?[副本]

刘弘济
2023-03-14

我在玩Java的可选代码,认为它的工作原理就像一个if else块。但是在下面的代码中,即使name变量不是null,也会执行orelse块的内容。有什么解释吗?

import java.util.Optional;

class Scratch {
  public static void main(String[] args) {
    String name = "some text";
    System.out.println(
    Optional.ofNullable(name)
        .map(n -> mapped())
        .orElse(getOrElse()));

  }
  static String mapped(){
    System.out.println("mapped -- block executed");
    return "mapped";
  }
  static String getOrElse(){
    System.out.println("orElse -- block executed");
    return "orElse";
  }
}

产出:

mapped -- block executed
orElse -- block executed
mapped

共有1个答案

喻渊
2023-03-14

请仔细查看optional.orelse(T)。它接受一个需要提供给该调用的值,但该值仅在else情况下才会返回。因此,在任何情况下都将执行getorelse()以获取该值。

optional.orelse(T)通常与已存在的值一起使用,例如:map(e->mapped()).orelse(“not found”)

如果要使用只有在其他情况下才会调用的函数,则需要使用optional.orelseGet(supplier<?extends t>),如下所示:map(e->mapped).orelseGet(scrath::getOrElse)(或orelseGet(()->getOrElse())。

 类似资料:
  • 这是一个简单的程序,生成0到1000之间的两个随机数,然后让用户输入两个数字的和。即使您输入了正确的答案,并且求和与答案匹配,if语句也总是计算为不正确。

  • 问题内容: 考虑到此代码,我是否可以绝对确定该块始终执行,无论它是什么? 问题答案: 是的,将在执行或代码块后调用。 唯一不会被调用的时间是: 如果您调用 System.exit() 如果您调用 Runtime.getRuntime().halt(exitStatus) 如果JVM首先崩溃 如果JVM在try或catch块中达到了无限循环(或其他不间断,不终止的语句) 操作系统是否强行终止了JVM

  • 问题内容: 考虑到此代码,我是否可以绝对确定该块始终执行,无论它是什么? 问题答案: 是的,将在执行或代码块后调用。 唯一不会被调用的时间是: 如果你调用 如果你调用 如果JVM首先崩溃 如果JVM在或catch块中达到了无限循环(或其他不间断,不终止的语句) 操作系统是否强行终止了JVM进程;例如,在UNIX上 如果主机系统死机;例如,电源故障,硬件错误,操作系统崩溃等 如果该块将由守护程序线程

  • 我需要解释一下,为什么执行了while()语句中的if()块。据说:while语句计算表达式,表达式必须返回布尔值。如果表达式的计算结果为true,则while语句将执行while块中的语句。请看一下这个代码: 一旦变量x超过5,不应该将其视为false吗?那么,如果执行块,该如何执行呢?基本上,它似乎为表达式5返回了真正的布尔值=5. 谢谢你的解释!

  • 我不懂pyplot。子地块(330 1 i)