- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
(注意:已编辑问题;之前的意图不明确)
考虑这段代码:
public final class Foo
{
private enum X
{
VALUE1, VALUE2
}
public static void main(final String... args)
{
final X x = X.VALUE1;
switch (x) {
case VALUE1:
System.out.println(1);
break;
case VALUE2:
System.out.println(2);
}
}
}
这段代码运行良好。
但是,如果我替换:
case VALUE1: // or VALUE2
与:
case X.VALUE1: // or X.VALUE2
然后编译器提示:
java: /path/to/Foo.java:whatever: an enum switch case label must be the unqualified name of an enumeration constant
所以 suggests an answer引用 JLS 的这段话:
(One reason for requiring inlining of constants is that switch statements require constants on each case, and no two such constant values may be the same. The compiler checks for duplicate constant values in a switch statement at compile time; the class file format does not do symbolic linkage of case values.)
但这并不能让我满意。就我而言,VALUE1
和 X.VALUE1
是完全一样的。引用的文字对我来说根本没有解释。
JLS 中哪里定义了 switch
语句中的 enum
值必须这样写?
最佳答案
SwitchLabel
需要 EnumConstantName
, 定义为枚举常量标识符 which is unqualified :
EnumConstant:
Annotationsopt Identifier Argumentsopt ClassBodyopt
关于java - 为什么不能在 switch 语句中完全限定枚举值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17764874/
我是一名优秀的程序员,十分优秀!