gpt4 book ai didi

java - 为什么不能在 switch 语句中完全限定枚举值?

转载 作者:IT老高 更新时间:2023-10-28 20:47:54 30 4
gpt4 key购买 nike

(注意:已编辑问题;之前的意图不明确)

考虑这段代码:

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.)

但这并不能让我满意。就我而言,VALUE1X.VALUE1 是完全一样的。引用的文字对我来说根本没有解释。

JLS 中哪里定义了 switch 语句中的 enum 值必须这样写?

最佳答案

SwitchLabel 需要 EnumConstantName , 定义为枚举常量标识符 which is unqualified :

EnumConstant:
Annotationsopt Identifier Argumentsopt ClassBodyopt

关于java - 为什么不能在 switch 语句中完全限定枚举值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17764874/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com