2012-10-08 96 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在他的文章中指出。