Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 带'的开关盒;静态最终字节';_Java_Switch Statement - Fatal编程技术网

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;
    }
}