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

OpenJDK 14.0.1给出了“开关表达式没有覆盖所有可能的输入值”

景景胜
2023-03-14

使用OpenJDK 14.0.1

public class Example {
    private String test(final ExampleEnum ee) {
        return switch (ee) {
            case Value -> null;
        };
    }
}
public enum ExampleEnum {

    Value;

    public enum InnerEnum {
    }

}

编译失败,出现“开关表达式未覆盖所有可能的输入值”。如果我从ExampleEnum中删除InnerEnum,代码就会编译。为什么此内部枚举的存在会导致switch表达式失败?是否有逻辑解释或编译器错误?

共有1个答案

梁丘缪文
2023-03-14

您需要添加默认案例,如下所示:

public class Example {
private String test(final ExampleEnum ee) {
    return switch (ee) {
        case Value -> null;
        default -> throw new IllegalStateException("Unexpected value");
    };
}
 类似资料:
  • 使用Brian Goetz的文章:https://www.infoq.com/articles/data-oriented-programming-java/ 使用,我得到编译错误:。 我可以添加一个默认的case语句,程序就可以运行了。然而,我认为对于密封的记录,给定的switch case将是详尽无遗的,编译器应该认识到默认情况是不必要的。

  • 我不断地得到错误 在终端上编译时。 在switch语句的末尾。这是在用终端编译的时候。

  • 我正在使用C#8.0,它支持我的项目中的开关表达式。我最近正在构建一个单元测试项目,并生成代码覆盖率报告。但是所有的开关表达式似乎都有问题。我的代码中有一些类似于以下内容的行: 我的测试方法涵盖了上面所有的情况,但是报告显示那些带有开关表达式的行没有被覆盖。就像这张图片:JetBrains Rider的报道亮点 我该怎么做才能把它们遮盖住。

  • 我正在编写一个需要插入多个CMS平台的HTML代码段。因此,我不知道什么CSS属性将应用到我的HTML中的各种标记,从CMS的样式表。 有什么方法可以使用HTML中的内联样式来告诉它忽略/重置样式表中应用在标记级别的所有声明样式吗? 如果我不能使用内联样式来做到这一点,是否可以使用外部样式表来做到这一点呢?

  • 我有一个有向图。我想找到从源到目标的所有可能路径,覆盖所有转换。这与“覆盖所有顶点的所有可能路径”不同。该图将正好有一个起始顶点,并且可能有多个结束顶点。如果没有传出转换,则节点是结束节点。集合中的路径可能具有重复的变换,但不能具有重复的顶点。附有一个示例有向图。顶点a(黑色)是起始顶点,顶点e和f是结束节点(黄色)。此图的解决方案如下所示。 您可以看到最后一条路径有两次b。这是有效的。i、 例如

  • 问题内容: 嗨,我有一个表测试,其结构如下: 现在,我需要查询该表(测试),以便获得以下输出。 Oracle 11g中的sql查询是否可以实现?11g中的PIVOT功能是否可以实现? 问题答案: 不,它不能用来完成,但是 可以 用来完成: 当不可用时,我通常会像这样取消透视: