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

instanceof的开关模式匹配始终返回null

丌官晨
2023-03-14

我试图将以下模式匹配开关实例的结果分配给变量languageCodeOfReturnValue。

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

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

“值”开关(对象){case PlantGuidePageWrapperDTO PlantGuidePageWrapperDTO-

当我删除default子句时,警告会消失,但会留下语法错误,因为开关没有涵盖所有可能的值。当我将null替换为空字符串"时,警告会消失。但是我真的希望默认值为null

因此,我的问题有两个:第一,在默认情况下,当我返回null值时,为什么switch语句的结果总是null。其次,当所有模式都不匹配时,返回null值的正确方法是什么?

非常感谢。

编辑:我正在使用Intellij IDEA作为IDE。也许这是一个无稽之谈?

共有1个答案

龙玄天
2023-03-14

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

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

 类似资料:
  • 主要内容:Java16 instanceof的模式匹配的语法,Java16 instanceof的模式匹配示例Java 14 引入了 instanceof 运算符以将类型测试模式作为预览功能。类型测试模式有一个谓词来指定具有单个绑定变量的类型。它仍然是 Java 15 中的预览功能。在 Java 16 中,此功能现已成为标准交付的一部分。 Java16 instanceof的模式匹配的语法 Java16 instanceof的模式匹配示例 ApiTester.java 编译并运行程序 输出结果为

  • 主要内容:Java15 instanceof的模式匹配的语法,Java15 instanceof的模式匹配的示例Java 14 引入了 instanceof 运算符以将类型测试模式作为预览功能。类型测试模式有一个 predicate来指定具有单个绑定变量的类型。它仍然是 Java 15 中的预览功能。 Java15 instanceof的模式匹配的语法 Java15 instanceof的模式匹配的示例 ApiTester.java 编译并运行程序 输出结果为  

  • 主要内容:Java14 instanceof语法,Java14 instanceof的示例Java 14 引入了 instanceof 运算符以将类型测试模式作为预览功能。类型测试模式有一个predicate来指定具有单个绑定变量的类型。 Java14 instanceof语法 Java14 instanceof的示例 ApiTester.java 编译并运行程序 输出结果为  

  • 本文向大家介绍JDK14的新特性:instanceof模式匹配的使用,包括了JDK14的新特性:instanceof模式匹配的使用的使用技巧和注意事项,需要的朋友参考一下 JDK14在2020年的3月正式发布了。可惜的是正式特性只包含了最新的Switch表达式,而Records,patterns,text blocks仍然是预览特性。 本文要讲的就是JDK14的一个预览特性instanceof的p

  • 问题内容: 想知道是否有一种方法可以在Swift中执行以下操作。 我知道我还有其他方法可以使这个人为的示例工作,例如是否使用开关,而是使用开关,但是我正在寻找一种解决方案,具体涉及将开关模式匹配到阵列。谢谢! 问题答案: 您可以定义一个自定义模式匹配运算符,该运算符 将一个数组作为“模式”和一个值: 类似的运算符已经存在,例如间隔:

  • 问题内容: 我以前使用过媒体播放器,但从未遇到过此问题。每当我尝试使用MediaPlayer.create()时,该方法都会使我为null,并且无法播放声音。有什么我想念的吗? 我的sound.mp3在我的原始文件夹中,通过将声音拖到eclipse中的文件夹中,我将其放置在其中。请帮忙,因为我以前玩过声音,所以这真的困扰我:( 问题答案: 如果create() API由于某种原因失败,则返回nul