使用“静态最终字节”切换大小写

发布于 2024-12-12 13:49:46 字数 367 浏览 4 评论 0原文

我需要将 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;
}

I need to use switch case with byte contants. I have static final constants declared like follows:

private static final byte[] X_CONST = {2};
private static final byte[] Y_CONST = {3};

Then I want to use switch case like follows :

byte[] x={3};

switch (x[0]){
    case X_CONST[0]: ...; break;
    case Y_CONST[0]: ...; break;
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

万水千山粽是情ミ 2024-12-19 13:49:46

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

The array may be static final, but the content of the array isn't. So it isn't allowed as the case value of a switch as the value itself could be changed at runtime. You will need to specify private static final byte X_CONST = 2 instead.

倾城泪 2024-12-19 13:49:46

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

尝试以下声明:

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

You have declared the constants as byte arrays.
Switch statements cannot be used with array types.

Try the following declaration:

private static final byte X_CONST = 2;
private static final byte Y_CONST = 3;
心的憧憬 2024-12-19 13:49:46

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

Other answers have pointed out the problem in your code. As a workaround, you can create a enum to use a switch statement like:

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;
    }
}
葬花如无物 2024-12-19 13:49:46

Switch 语句 不能与数组一起使用。

开关适用于 byte、short、char 和 int 原始数据
类型。它还适用于枚举类型、String 类和
包装某些原始类型的一些特殊类:字符,
字节、短整型和整数。

Switch statement cannot be used with array.

A switch works with the byte, short, char, and int primitive data
types. It also works with enumerated types, the String class, and a
few special classes that wrap certain primitive types: Character,
Byte, Short, and Integer.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文