enum Color {RED, GREEN, BLUE};
class SwitchEnum
{
public static void main(String[] args)
{
Color c = Color.GREEN;
switch(c)
{
case RED:
System.out.println("red");
break;
case GREEN:
System.out.println("green");
break;
case BLUE:
System.out.println("blue");
break;
}
}
}
上面的代码可以很好地编译并给出预期的输出。
我的问题是为什么在创建颜色引用“c”时我们需要通过枚举名称(即 Color.GREEN)引用它,但在 case block 中只有枚举值就足够了。不应该是吗
case Color.RED:
等???
最佳答案
不,不应该。 Java 编译器足够聪明,知道您正在打开 Color
,因此该语言允许使用此快捷方式(正如 Paul 指出的那样,需要它)。事实上,switch 语句的整个编译过程取决于编译器是否知道您正在打开什么,因为它会根据您指定的枚举值的索引将 switch 转换为跳转表。直到最近,您才能够打开非数字的东西,例如 String
。
语言规范的相关部分在 JLS Chapter 14.11 中:
... SwitchLabel: case ConstantExpression : case EnumConstantName : default : EnumConstantName: Identifier
如果您要深入了解为什么语言是这样设计的,那将很难客观地回答。语言设计很微妙,您必须考虑到赋值语法是在添加枚举支持之前多年编写的。
关于java - switch case 中的枚举引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10545322/