【问题标题】:java 17 "'switch' expression does not cover all possible input values" is not shown if there is no returnjava 17 \"\'switch\'表达式没有覆盖所有可能的输入值\"如果没有return则不显示
【发布时间】:2023-02-09 17:36:52
【问题描述】:

我正在 IntelliJ 2022.2 中使用 Java 17 进行开发。

在某些情况下显示'switch' expression does not cover all possible input values,但在某些情况下不显示。我想弄清楚为什么。

假设 entityType 是一个具有 3 个值的枚举,我要添加第 4 个 TYPE_D。所以我希望在 switch 中使用此枚举时看到 'switch' expression does not cover all possible input values 错误。

显示时:

public Map<String, String> getRecordDetails() {
    return switch (entityType) {
        case TYPE_A -> Map.of("A","A");
        case TYPE_B -> Map.of("B","B");
        case TYPE_C -> Map.of("C","C");

    };
}

未显示:

public String getRecordDetails() {
    StringBuilder stringBuilder = new StringBuilder();
    switch (entityType) {
        case TYPE_A -> stringBuilder.append("A");
        case TYPE_B -> stringBuilder.append("B");
        case TYPE_C -> stringBuilder.append("C");

    };
    return stringBuilder.toString(); 
}

当我返回 switch case 时我看到它是相关的,但是为什么当我在函数代码中有 switch case 时它没有显示?

【问题讨论】:

  • 在您的第一个示例中,Type_D 没有返回任何内容,在您的第二个示例中,仍然返回一个默认值
  • @user16320675 你似乎已经切换了链接(表达式 <> 语句)
  • 使用默认值怎么样,例如default -&gt; Map.of();
  • 第一个是切换表达式(15.28. switch Expressions),第二个开关语句(14.11. The switch Statement),以及更多explicitly:“如果选择器表达式的类型是枚举类型,则 (i) 与 switch 块关联的 case 常量集包括枚举类型的每个枚举常量,
  • (换句话说,一个表达式必须总是返回一个值[或抛出一个异常];一个语句不能做任何事情)(顺便说一句,一些 IDE 对第二种情况显示警告)

标签: java intellij-idea switch-statement


【解决方案1】:

是的,我认为当 switch 语句缺少“default”子句或“case”子句都不适用时,就会出现问题。

public String getRecordDetails() { 
   StringBuilder stringBuilder = new StringBuilder();
    switch (entityType) {
       case TYPEA -> stringBuilder.append("A");
       case TYPEB -> stringBuilder.append("B");
       case TYPE_C -> stringBuilder.append("C"); 
       default -> stringBuilder.append("Unknown");
       }; 
    return stringBuilder.toString(); 
   }

试试这个实现,我希望它能正常工作。祝你好运

【讨论】:

    猜你喜欢
    • 2020-08-17
    • 1970-01-01
    • 2023-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-17
    • 1970-01-01
    相关资源
    最近更新 更多