为什么枚举常量在 java 的 switch case 中必须是非限定的?

Why must enum constants be unqualified in switch cases in java?

一些上下文。这是关于 switch cases 中限定枚举名称的问题,如示例所示:

enum MyEnum {
    A,
    B,
    ;
}
switch(methodReturnungMyEnum()){
case MyEnum.A:
    // ...
    break
case MyEnum.B:
    // ...
    break
}

产生编译器错误

An enum switch case label must be the unqualified name of an enumeration constant

是的。解决方案很简单:删除 MyEnum. 部分。那不是我的问题。

我只是想知道 为什么这首先被禁止。 我知道基本上不可能肯定地回答 为什么 某事是以某种方式完成的。相反,我想询问可能导致此决定的原因。合格和不合格的枚举常量(或一般符号)有何不同?如果编译器允许这样做,会出现什么问题?

虽然存在很多关于如何修复编译器错误本身的问题,但似乎没有人解决上述问题。

真正的枚举类型被定义到 switch 语句中,然后,对于每个 case 子句,编译器只需要检查该枚举中是否存在文字。

如果您允许在 case 子句中指定限定(完全限定等...),则编译器必须执行一个无用的步骤(检查该符号是给定枚举的成员).

这就是为什么说它不是(乍一看可能是这样)的原因。

从技术上讲,该限制已得到响应 here and explained here