先上一段能编译通过的程序:enumDirection{EAST,WEST,SOUTH,NORTH;}publicclassSimpleEnum{publicstaticvoidmain(Stringargs[]){Directiond=Direction.EAST;switch(d){caseEAST:System.out.println("Dragon");break;caseWEST:System.out.println("Tiger");break;caseSOUTH:System.out.println("Peacock");break;caseNORTH:System.out.println("Tortoise");}}}我的疑问是:为什么程序中对enum常量的引用不一致?在main函数中,Directiond=Direction.EAST;如果写成Directiond=EAST;javac会报错,说找不到符号EAST.而switchcase的代码块中必须直接跟枚举常量,如果把caseEAST:改成caseDirection.EAST:,javac会报告说:枚举switchcase标签必须为枚举常量的非限定名称。这种形式的不一致让人有些不爽。为什么会有这种不一致呢?
2 回答
拉莫斯之舞
TA贡献1820条经验 获得超10个赞
规范是这么定义的,应该有他的原因,虽然我还没有找到,但是可以猜测一下。如果在主函数中写Directiond=EAST;那么EAST枚举容易和类里面的变量(或者常量)混淆。而在switch块里面则没有这个问题。
添加回答
举报
0/150
提交
取消