Java 带'的开关盒;静态最终字节';
我需要将Java 带'的开关盒;静态最终字节';,java,switch-statement,Java,Switch Statement,我需要将开关盒与字节contants一起使用。我有如下声明的静态final常量: private static final byte[] X_CONST = {2}; private static final byte[] Y_CONST = {3}; 然后我想使用如下的switch case: byte[] x={3}; switch (x[0]){ case X_CONST[0]: ...; break; case Y_CONST[0]: ...; break; } 您
开关盒
与字节
contants一起使用。我有如下声明的静态final
常量:
private static final byte[] X_CONST = {2};
private static final byte[] Y_CONST = {3};
然后我想使用如下的switch case:
byte[] x={3};
switch (x[0]){
case X_CONST[0]: ...; break;
case Y_CONST[0]: ...; break;
}
您已经将常量声明为字节数组。 Switch语句不能与数组类型一起使用 请尝试以下声明:
private static final byte X_CONST = 2;
private static final byte Y_CONST = 3;
数组可以是静态的final,但数组的内容不是。因此,不允许将其作为开关的大小写值,因为该值本身可以在运行时更改。您需要指定
专用静态最终字节X_CONST=2
。其他答案指出了代码中的问题。作为一种解决方法,您可以创建一个枚举来使用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");
}
}
不能与数组一起使用
一个开关可以处理byte、short、char和int原语数据
类型。它还适用于枚举类型、字符串类和
很少有特殊类包装某些基本类型:Character,
字节、短字符和整数
public static void main(String[] args) {
byte[] x={3};
switch (MY_ENUM.valueOf(x[0])) {
case X_CONST: ...; break;
case Y_CONST: ...; break;
}
}