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