Определяющие константы, такие как #define, которые могут использоваться в операторах switch в java

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

Когда я часто предлагаю

 public static final Integer myXYZ = 1; 

а также

 case Constants.myXYZ: 

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

Какой был бы лучший способ разрешить это?

Благодаря!

Просто измените его на int и все должно быть хорошо:

 public static final int myXYZ = 1; 

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

Постоянное выражение времени компиляции представляет собой выражение, обозначающее значение примитивного типа или String, которое не завершается внезапно и составлено с использованием только следующих […]

Поэтому выражение типа int может быть константным выражением, но выражение типа Integer не может.

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

Использовать int :

 public static final int myXYZ = 1; 

Или использовать константы enum .

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