强制穷举开关

2022-09-04 01:20:26

是否有注释或其他方法可以将非穷举开关语句警告转换为错误?我希望某个方法或类在开关中未正确处理所有值时产生错误。

例:

public enum E {
  A,
  B
}

在代码中的其他地方,有一个开关,就像这样

switch (enumValue) {
case A: /* do something */ break;
}

Java 会给您一条警告,指出此开关不处理所有枚举值。我想将此警告转换为错误(永久,无论单个IDE设置如何)。

请记住,在这种情况下,我无法更改原始文件,因此我希望编译器强制执行它。enum


答案 1

我知道这是一个旧线程,但在最新的JDK中有一个新的答案:

切换表达式必须详尽无遗,并且可作为 JDK 12 和 13 中的预览语言功能提供。

https://openjdk.java.net/jeps/354

这意味着您可以将需要验证的 switch 语句修改为 switch 表达式,而其他 switch 语句将继续按预期工作。


答案 2

由于这是一个枚举,而不是 switch 语句,因此可以使用抽象方法。所有枚举值都必须实现它。例如:

public enum MyEnum
{
    A {
        @Override public void foo() { /*whatever*/ }
    }
    // etc

    public abstract void foo();
}

然后在需要时调用它,而不是像您当前那样使用 switch 语句。yourEnum.foo()

不实现该方法不是一种选择...编译将失败。