我需要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;
}
答案 0 :(得分:7)
数组可能是静态final,但数组的内容不是。因此,不允许将其作为开关的案例值,因为值本身可以在运行时更改。您需要指定private static final byte X_CONST = 2
。
答案 1 :(得分:3)
您已将常量声明为字节数组。 Switch语句不能与数组类型一起使用。
请尝试以下声明:
private static final byte X_CONST = 2;
private static final byte Y_CONST = 3;
答案 2 :(得分: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;
}
}
答案 3 :(得分:0)
Switch statement不能与数组一起使用。
开关使用byte,short,char和int原始数据 类型。它也适用于枚举类型,String类和a 包含某些原始类型的特殊类:Character, 字节,短整数和整数。