是否有注释或其他方法将非详尽的switch语句警告变为错误?如果未正确处理所有值,我想要某个方法或类产生错误。
示例:
public enum E {
A,
B
}
和代码中的其他地方有一个像这样的枚举的开关
switch (enumValue) {
case A: /* do something */ break;
}
Java会向您发出警告,指出此开关不处理所有枚举值。我想将此警告转为错误(永久,无论各个IDE设置如何)。
请注意,在这种情况下我无法更改原始enum
,所以我希望编译器强制执行它。
答案 0 :(得分:4)
由于这是枚举,而不是switch语句,您可以使用抽象方法;所有枚举值都必须实现它。例如:
public enum MyEnum
{
A {
@Override public void foo() { /*whatever*/ }
}
// etc
public abstract void foo();
}
然后在需要时调用yourEnum.foo()
,而不是像目前那样使用switch语句。
不实现该方法不是一个选项......编译将失败。
答案 1 :(得分:4)
我知道这是一个旧线程,但是最新的JDK中有一个新答案:
开关表达式必须详尽无遗,并且可以在JDK 12和13中作为预览语言功能使用。
https://openjdk.java.net/jeps/354
这意味着您可以将需要验证的 switch 声明 修改为 switch 表达式 ,而其他switch语句将继续按预期工作。
答案 2 :(得分:3)
好吧,您可以更改IDE中的设置以将警告变为错误。
在Eclipse中,例如,在Window->Preferences->Java->Compiler->Errors/Warnings
下,您可以决定是否应忽略Incomplete 'switch' cases on enum
或产生警告或错误。
如果您的switch语句不在enum上,那么强制指定所有案例都没有意义,因为会有大量案例。
答案 3 :(得分:0)
像Checkstyle这样的Linters会对此进行标记,因此如果你构建了一个linter部分,那么你将得到一个"编译时间" (我知道它是编译后的一个阶段,但它基本上是相同的)警告。甚至还在Eclipse和IntelliJ中集成了Checkstyle(可能还有其他的linters),以便在IDE中标记它。