1

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

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

这会产生编译器错误

枚举 switch case 标签必须是枚举常量的非限定名称

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

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

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

4

1 回答 1

1

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

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

这就是为什么说它是不一样的原因(这就是它起初看起来的样子)。

从技术上讲,该限制在此处得到响应并此处进行解释。

于 2021-08-17T08:33:09.133 回答