Переключать регистр со «статическим последним байтом» - PullRequest
4 голосов
/ 28 октября 2011

Мне нужно использовать 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;
}

Ответы [ 4 ]

7 голосов
/ 28 октября 2011

Массив может быть статическим окончательным, но содержимое массива - нет. Таким образом, это не допустимо в качестве значения параметра переключателя, поскольку само значение может быть изменено во время выполнения. Вам нужно будет указать private static final byte X_CONST = 2.

3 голосов
/ 28 октября 2011

Вы объявили константы как байтовые массивы. Операторы Switch нельзя использовать с типами массивов.

Попробуйте следующее объявление:

private static final byte X_CONST = 2;
private static final byte Y_CONST = 3;
1 голос
/ 28 октября 2011

Другие ответы указывают на проблему в вашем коде. В качестве обходного пути вы можете создать перечисление для использования оператора 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;
    }
}
0 голосов
/ 05 января 2018

Оператор Switch нельзя использовать с массивом.

Коммутатор работает с байтовыми, короткими, символьными и примитивными данными int. типы. Он также работает с перечисляемыми типами, классом String и несколько специальных классов, которые обертывают определенные примитивные типы: Байт, короткое и целое число.

...