Javaswitch语句的语法强制检查所有已知的枚举情况
我想知道现代 Java lang 语法是否允许对所有已知的 Enum 实例执行检查:没有 Enum 元素没有离开case.
像:
enum RGB { RED, GREEN, BLUE }
enum RGB { RED, GREEN, BLUE }
编译器应该禁止:
我知道,default: throw new IllegalStateException()但这发生在运行时。我正在寻找编译时强制执行或更弱的警告...
回答
你有两个选择。
-
使用新的 switch-as-an-expression 形式(我还加入了新的箭头案例标签,但这与您的问题无关):
int x = switch(rgb) { case RED -> 0xFF0000; case BLUE -> 0x0000FF; case GREEN -> 0x00FF00; };如果您忘记了案例,这将导致编译器错误。
注意:这些是在 JDK13 中作为预览正确引入的,并且可以在没有
--enable-preview从 JDK14 开始的开关的情况下使用。如果这不是您要查找的内容,则没有编译器选项,并且通常 java 的编译器不能以这种方式插入(它可以通过注释处理器系统插入,通常不能查看方法中的代码,因此,不能用于这个)。
-
但确实存在的是 linting 工具:扫描您的代码并查找内容的工具。例如,大多数 IDE 都内置了它们,并且 eclipse(我很熟悉 - 其他人可能也有这个)可以选择为遗漏的情况生成警告或错误(无论你喜欢什么) - 这适用于 ' old' switch 语句也是如此。还有像 sonarqube 这样的独立 linting 工具。
- @gavenkoa yes, the new syntax allows groups of statements. Just use `{ statement, statement, yield result; }`