Sur*_*ran 7 java enums switch-statement
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;
}
}
}
Run Code Online (Sandbox Code Playgroud)
上面的代码编译得很好并给出了预期的输出.
我的问题是为什么在创建Color引用'c'时我们需要通过枚举的名称(即Color.GREEN)引用它,但在case块中只有enum值足够.不应该
case Color.RED:
Run Code Online (Sandbox Code Playgroud)
等等???
不,它不应该.Java编译器很聪明,知道你正在打开a Color,所以语言允许这个快捷方式(正如Paul所说,需要它).实际上,switch语句的整个编译取决于编译器知道你要切换的内容,因为它根据你指定的枚举值的索引将交换机转换为跳转表.直到最近你才能开启非数字化的东西,如a String.
语言规范的相关部分在JLS第14.11章中:
Run Code Online (Sandbox Code Playgroud)... SwitchLabel: case ConstantExpression : case EnumConstantName : default : EnumConstantName: Identifier
如果你正在寻找洞察为什么语言的设计方式,那就很难客观地回答.语言设计很细微,您必须考虑在添加枚举支持之前多年和几年编写赋值语法.