使用'static final byte'切换案例

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用'static final byte'切换案例相关的知识,希望对你有一定的参考价值。

我需要使用switch casebyte的含量。我有static 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;
}
答案

该数组可能是静态final,但数组的内容不是。因此,不允许将其作为开关的案例值,因为值本身可以在运行时更改。您需要指定private static final byte X_CONST = 2

另一答案

您已将常量声明为字节数组。 Switch语句不能与数组类型一起使用。

请尝试以下声明:

private static final byte X_CONST = 2;
private static final byte Y_CONST = 3;
另一答案

其他答案指出了代码中的问题。作为解决方法,您可以创建枚举以使用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;
    }
}
另一答案

Switch statement不能与数组一起使用。

交换机使用byte,short,char和int原始数据类型。它还适用于枚举类型,String类和一些包含某些基本类型的特殊类:Character,Byte,Short和Integer。

以上是关于使用'static final byte'切换案例的主要内容,如果未能解决你的问题,请参考以下文章

static是java关键字吗

编译器无缘无故地将'static推断为生命周期

final和static使用场景

static 和 final 和 static final

final和static

Java之static和final的使用陷阱