【问题标题】:Switch pattern matching for instanceof returns always nullinstanceof 的切换模式匹配始终返回 null
【发布时间】:2022-01-26 15:59:05
【问题描述】:

我正在尝试将以下instanceof pattern matching switch 的结果分配给变量languageCodeOfReturnValue

    String languageCodeOfReturnValue = switch (object){
                case PlantGuidePageWrapperDTO plantGuidePageWrapperDTO -> plantGuidePageWrapperDTO.getSeedDetailsDTO().getPageSummaryLanguageCode();
                case JournalEntryDetailsDTO journalEntryDetailsDTO -> journalEntryDetailsDTO.getLanguageCode();
                case JournalOverviewDTO journalOverviewDTO -> journalOverviewDTO.getPageSummaryLanguageCode();
                default -> null;
    };

但此代码会导致以下警告:

Value 'switch (object){ case PlantGuidePageWrapperDTO plantGuidePageWrapperDTO -> 植物...' 始终为 'null'

当我删除 default 子句时,警告会消失,但随后会出现语法错误,因为 switch 不会涵盖所有可能的值。当我将null 替换为空字符串'' 时,警告消失。但是我真的希望默认值为null

所以我的问题是双重的:首先,当我在默认情况下返回空值时,为什么 switch 语句的结果总是空的。其次,当没有任何模式匹配时,返回 null 值的正确方法是什么?

谢谢

编辑:我使用 Intellij IDEA 作为 IDE。也许它是一个 inellij IDEA 错误?

【问题讨论】:

  • @OHGODSPIDERS 据我所知,您不必在pattern matching switch 中使用break statements。我还阅读了来自 baeldung 的关于 pattern matching switches 的教程,他在他的 switch 示例中也没有使用任何 break 语句。
  • 啊,是的。忘了我说的话。我看错了代码。
  • 什么是object
  • object 的类型为 Object @Seelenvirtuose
  • 请在 YouTrack 上创建问题:youtrack.jetbrains.com/issues/IDEA 提供代码示例。谢谢

标签: java intellij-idea switch-statement pattern-matching


【解决方案1】:

您的 switch 语句看起来是正确的。仅基于 IntelliJ 警告,您的所有个案语句似乎都返回空值。正如您提到的,当您将默认值更改为空字符串时,警告会消失,因为现在所有 case 语句都不会返回空值。

此外,在处理空值时,您始终可以使用可选值。

【讨论】:

  • it seems like all your individual cases statements return a null value。 Intellij IDEA 不可能提前知道这样的事情。只有当 getter 默认都返回 null 时,它才能检测到这一点,而他们没有。
猜你喜欢
  • 2015-06-08
  • 2020-09-08
  • 2016-05-31
  • 2015-08-15
  • 2012-03-18
  • 2016-11-04
  • 2016-07-28
  • 2010-11-08
  • 2017-11-26
相关资源
最近更新 更多