【发布时间】: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 -> Map.of(); -
第一个是切换表达式(15.28. switch Expressions),第二个开关语句(14.11. The switch Statement),以及更多explicitly:“如果选择器表达式的类型是枚举类型,则 (i) 与 switch 块关联的 case 常量集包括枚举类型的每个枚举常量,“
-
(换句话说,一个表达式必须总是返回一个值[或抛出一个异常];一个语句不能做任何事情)(顺便说一句,一些 IDE 对第二种情况显示警告)
标签: java intellij-idea switch-statement