【发布时间】:2021-08-17 08:27:06
【问题描述】:
一点上下文。这是关于 switch case 中限定枚举名称的问题,如示例中所示:
enum MyEnum {
A,
B,
;
}
switch(methodReturnungMyEnum()){
case MyEnum.A:
// ...
break
case MyEnum.B:
// ...
break
}
导致编译器错误
枚举 switch case 标签必须是枚举常量的非限定名称
是的。解决方案很简单:删除MyEnum. 部分。那不是我的问题。
我只是想知道为什么这是禁止的。 我知道基本上不可能肯定地回答为什么某事以某种方式完成。相反,我想询问可能导致此决定的原因。合格和不合格的枚举常量(或者一般来说可能是符号)有什么不同?如果编译器仍然允许这样做会出现什么问题?
虽然关于如何修复编译器错误本身存在很多问题,但似乎没有人解决上述问题。
【问题讨论】:
-
编译器知道它根据
MyEnum枚举选择一个案例,因此无需完全限定常量。错误消息的措辞可能会更好一些。 -
@MuratKaragöz 那个答案并没有解释为什么不能的决定(只是技术上为什么不能)。
-
@Sweeper 这里存在一个不启用该功能(限定常量)的技术原因,并在我的回答中进行了解释。我正在回答显示这样做的成本(这是客观的)。你真的不认为人们了解这个他们可能经常想知道的概念是有用的吗?
-
@josejuan 我从来没有说过没有技术原因,也从来没有说过学习这个概念没有用。我的意思是这个问题问得不好。我引用:“'为什么'问题的根本问题不在于答案是一种意见。根本问题是不可能知道什么会让提出问题的人满意,因为问题很模糊”
标签: java enums compilation qualified-name unqualified-name