2012-10-08 58 views
1

在调试我的代码时,我用枚举上的switch语句碰到了这个有趣的场景。使用Java switch语句和枚举的有趣结果

对我来说,它看起来应该不会编译,并阻止我犯这个愚蠢的错误,有什么我缺少的地方可以使用这种语法?

我的Java版本是1.6.0_10

private enum E_TEST 
{ 
    A, B, C, D, E 
} 

public static void main(String[] args) 
{ 
    for(E_TEST e : E_TEST.values()) 
    { 
     switch(e) 
     { 
      case A: B: C: D: E: 
      { 
       System.out.println(e); 
       break; 
      } 
     } 
    } 
} 

为了完整起见,这段代码的输出结果如下。

A 
+0

是什么让你觉得,这段代码失败了,是它切换部分(或)情况的一部分?我强烈怀疑你的java版本为7 http://docs.oracle.com/javase/specs/jls/se7/html/jls-14.html#jls-14.11 – kosa

+0

我的预期输出是ABCDE,以获得我的预期结果在需要关键字的情况下在所有的枚举前面。 我希望编译器能够发现这个错误。 – bandanna2k

回答

4

代码编译因为在线路

 case A: B: C: D: E: 

的,B:C:d:和E:是标签。

它不会做你所期望的,因为这条线应该是

case A: case B: case C: case D: case E: 

如dasblinkenlight在他的文章中指出。