2011-10-28 10 views
4

switch casebyte contentを使用する必要があります。次のように私はstatic final定数が宣言している:'static final byte'のスイッチケース

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

をあなたはバイト配列として定数を宣言しました。 switch文は配列型では使用できません。

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

他の回答がコード内で問題を指摘しています。

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を配列で使用することはできません。回避策として、あなたは次のようにswitchステートメントを使用する列挙型を作成することができます。

スイッチは、byte型、short型、char型、int型のプリミティブデータで動作します。 型です。また、列挙型、Stringクラス、特定のプリミティブ型(文字、 Byte、Short、およびInteger)をラップする特殊クラスがいくつかあります( )。

関連する問題