2013-04-09 138 views
1

我想用不同的方式初始化最後一個字段。因此我創建了一個枚舉類型並對其進行切換。Java在開關默認情況下抱怨最終字段沒有初始化

public enum TYPE { 
     A, 
     B, 
    } 

我還添加了一個默認情況下該開關用聲明來警告我的同胞的程序員的情況下,他們增加一個新的枚舉常量和 忘記更新交換機。然而

 default: 
      assert false : "missing TYPE detected"; 

的Java檢測我的論點中的謬誤,並抱怨說,空白字段可能沒有被初始化。我應該如何處理這種情況?

public class SwitchExample 
{ 
    public enum TYPE { 
     A, 
     B, 
    } 

    private final int foo; 

    public SwitchExample(TYPE t) 
    { 
     switch (t) { 
     case A: 
      foo = 11; 
      break; 

     case B: 
      foo = 22; 
      break; 

     default: 
      assert false : "missing TYPE detected"; 
     } 

     // The blank final field foo may not have been initialized 
    } 
} 
+1

然後就初始化它在你的'default' – 2013-04-09 09:10:40

回答

4

取而代之的assert false : "missing TYPE detected";如果使用你被迫設置在您的switch語句中所有的情況下它的值final關鍵字,你可能會拋出一個IllegalArgumentException("missing TYPE detected")

0

當你重新分配富基準

foo = 11; 

你不能將它聲明爲final

private final int foo; 

http://javarevisited.blogspot.fr/2011/12/final-variable-method-class-java.html

+0

您可以指定內部構造一個'final'變量 – 2013-04-09 09:12:31

+1

您不必在聲明的時候初始化最後的變量的值:HTTP://en.wikipedia .org/wiki/Final_(Java)#Final_variables – 2013-04-09 09:12:33

+0

好的:)我學到了一些東西。 – Gab 2013-04-09 09:14:27

0

您可以default後更改代碼,以類似這個:

assert (foo = 0) > 0 : "missing TYPE detected"; 
0

。要解決這個問題,只需將foo設置爲您知道的值即表示發生了錯誤,例如, -1

相關問題