【问题标题】:Nested Optional.get generates warning when checked and chained in orElse()嵌套 Optional.get 在 orElse() 中检查并链接时会生成警告
【发布时间】:2022-07-11 23:33:55
【问题描述】:

我刚刚偶然发现了 IntelliJ 生成的警告,我想知道,是我遗漏了什么还是 IntelliJ 只是忽略了以下 or 子句的右侧?

示例代码:

  Random random = new Random();
  public void test(){
    Optional<String> a = Optional.ofNullable(random.nextInt(10)>5?"something":null);
    Optional<String> b = Optional.ofNullable(random.nextInt(10)>5?"something":null);
    if(a.isPresent() || b.isPresent()){
      log.info(a.orElse(b.get()));
    }
  }

警告'Optional.get()' without 'isPresent()' check 显示在b.get() 上。 我知道 or 是以一种懒惰的方式从左到右评估的,但我会假设 ab 必须存在一个值,因为它在 if 中明确检查。

这是 IntelliJ 的静态代码分析中的错误吗?

【问题讨论】:

    标签: java intellij-idea optional


    【解决方案1】:

    我知道 or 是以一种懒惰的方式从左到右计算的

    是,这意味着如果 a.isPresent() 返回 true,则不会评估 b.isPresent() 并且条件仍然为 true。此时,如果 b.isPresent() 为 false,您的 b.get() 将抛出异常。

    (我假设这是一个玩具示例,所以我不会进一步评论这里发生的Optional 的滥用)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-09-22
      • 1970-01-01
      • 2021-10-05
      • 2020-03-11
      • 1970-01-01
      • 2016-12-08
      • 2017-09-25
      • 2017-09-25
      相关资源
      最近更新 更多