2011-10-28 43 views
4

我需要使用switch case以及byte命令。我有static final常量聲明如下所示:具有'靜態最終字節'的開關盒

private static final byte[] X_CONST = {2}; 
private static final byte[] Y_CONST = {3}; 

然後我想用開關罩狀如下:

byte[] x={3}; 

switch (x[0]){ 
    case X_CONST[0]: ...; break; 
    case Y_CONST[0]: ...; break; 
} 

回答

7

該陣列可以是靜態的決賽,但數組的內容是沒有的。所以它不被允許作爲開關的情況值,因爲值本身可以在運行時改變。您需要指定private static final byte X_CONST = 2

+1

(常數)字節被接受 –

+0

@CarlosHeuberger謝謝,我刪除了我的評論 –

3

聲明該常數作爲字節數組。 交換語句不能用於數組類型。

嘗試以下聲明:

private static final byte X_CONST = 2; 
private static final byte Y_CONST = 3; 
1

其他答案已經指出你的代碼中的問題。作爲一種變通方法,您可以創建一個枚舉使用switch語句,如:

public enum MY_ENUM { 
    X_CONST((byte)2), 
    Y_CONST((byte)3); 

    private final byte value; 

    private MY_ENUM(byte value) { 
     this.value = value; 
    } 

    public byte getValue() { 
     return value; 
    } 

    public static MY_ENUM valueOf(byte b) { 
     MY_ENUM[] values = MY_ENUM.values(); 
     for (int i = 0; i < values.length; i++) { 
      if (values[i].getValue() == b) { 
       return values[i]; 
      } 
     } 
     throw new IllegalArgumentException("Invalid input byte"); 
    } 
} 

...

public static void main(String[] args) { 
    byte[] x={3}; 

    switch (MY_ENUM.valueOf(x[0])) { 
     case X_CONST: ...; break; 
     case Y_CONST: ...; break; 
    } 
} 
0

Switch statement無法與陣列中使用。

交換機與字節,short,char和int原始數據類型 類型。它也適用於枚舉類型,String類和幾個包裝特定基本類型的特殊類:字符, Byte,Short和Integer。