определение констант, таких как #define, которые можно использовать в выражениях switch в java - PullRequest
3 голосов
/ 04 октября 2011

Я хотел бы определить некоторые константы, такие как #define myXYZ 1, чтобы я мог также использовать их в операторах switch.

Когда я часто рекомендую

public static final Integer myXYZ = 1;

и

case Constants.myXYZ:

Я получаю сообщение компилятора, что case expression must be constant

Как лучше всего решить эту проблему?

Спасибо!

Ответы [ 3 ]

12 голосов
/ 04 октября 2011

Просто измените его на int, и все должно быть в порядке:

public static final int myXYZ = 1;

Это потому, что значение регистра должно быть константным выражением или именем перечисления. Из раздела 15.28 JLS (константные выражения):

Константное выражение времени компиляции - это выражение, обозначающее значение типа примитива или String, которое не завершается внезапно и составлено с использованием только следующего [...]

Следовательно, выражение типа int может быть константным выражением, но выражение типа Integer не может.

Если это набор значений, который сам по себе имеет смысл как концепция, тогда enum мог бы иметь больше смысла.

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

Использование int:

public static final int myXYZ = 1; 

или используйте enum константы.

1 голос
/ 04 октября 2011

Если вы хотите переключаться между ними, лучше всего использовать перечисление вместо

...