Javaswitch语句的语法强制检查所有已知的枚举情况

我想知道现代 Java lang 语法是否允许对所有已知的 Enum 实例执行检查:没有 Enum 元素没有离开case.

像:

enum RGB { RED, GREEN, BLUE }
enum RGB { RED, GREEN, BLUE }

编译器应该禁止:

我知道,default: throw new IllegalStateException()但这发生在运行时。我正在寻找编译时强制执行或更弱的警告...

回答

你有两个选择。

  1. 使用新的 switch-as-an-expression 形式(我还加入了新的箭头案例标签,但这与您的问题无关):

    int x = switch(rgb) {
        case RED -> 0xFF0000;
        case BLUE -> 0x0000FF;
        case GREEN -> 0x00FF00;
    };
    

    如果您忘记了案例,这将导致编译器错误。

    注意:这些是在 JDK13 中作为预览正确引入的,并且可以在没有--enable-preview从 JDK14 开始的开关的情况下使用。

    如果这不是您要查找的内容,则没有编译器选项,并且通常 java 的编译器不能以这种方式插入(它可以通过注释处理器系统插入,通常不能查看方法中的代码,因此,不能用于这个)。

  2. 但确实存在的是 linting 工具:扫描您的代码并查找内容的工具。例如,大多数 IDE 都内置了它们,并且 eclipse(我很熟悉 - 其他人可能也有这个)可以选择为遗漏的情况生成警告或错误(无论你喜欢什么) - 这适用于 ' old' switch 语句也是如此。还有像 sonarqube 这样的独立 linting 工具。

  • @gavenkoa yes, the new syntax allows groups of statements. Just use `{ statement, statement, yield result; }`

以上是Javaswitch语句的语法强制检查所有已知的枚举情况的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>