Выражения case должны быть постоянными выражениями для статического окончательного int?
У меня есть final class Ring
, определяемый как:
final class Ring {
public static final int OUT = 3;
public static final int MID = 2;
public static final int IN = 1;
}
У меня также есть public class MorrisBoard
со следующим кодом:
public class MorrisBoard {
public static final Ring RING = new Ring();
private boolean checkMillBy(int ring, int x, int y) {
switch(ring) {
case MorrisBoard.RING.OUT:
//...
case MorrisBoard.RING.MID: //etc.
//...
}
return false;
}
MorrisBoard.RING.OUT
ссылается на переменную, которая неизменна для времени жизни программы. Все значения являются окончательными.
Однако я все еще получаю следующую ошибку: case expressions must be constant expressions
. Я смущен этим - MorrisBoard.RING.OUT
является постоянным выражением.
Что здесь происходит?
Ответы
Ответ 1
Заменить
case MorrisBoard.RING.OUT:
с
case Ring.OUT:
Так что это будет действительно константа, как в "Определенная при компиляции".
В спецификации указано, что "SwitchLabel" должен быть
-
case
, за которым следует постоянное выражение
-
case
, за которым следует имя значения enum
- или
default
То, что считается действительным постоянным выражением, описано здесь в спецификации. Это довольно ограничено.
Ответ 2
Простое решение этой проблемы:
Нажмите переключатель , а затем нажмите CTL + 1,. Он изменит ваш переключатель на оператор блока if-else и решит вашу проблему.