Есть ли способ преобразования перечисления в константное выражение? Я хочу, чтобы мой оператор переключатель, чтобы выбрать среди значений перечисления, но я получил компиляции ошибку «случай выражения должны быть константными выражениями», поэтому я попытался объявить его в переменной:Константные выражения из Enum
final int REG = MyEnum.REG.getIndex().intValue();
switch (service.getIndex()) {
case REG:
Но я до сих пор получить ту же ошибку. Согласно документации Oracle, http://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.28
времени компиляции константа является выражение, обозначающее значение примитивного типа или строка, которая не завершается внезапно и является компоновать с использованием только следующее:
• литералов примитивного типа и литералов типа String
Так что это не работает, потому что я не использую литерал. Я думаю, что я должен объявить его как:
final int REG = 8;
Но было бы гораздо лучше, чтобы связать его с перечислением. Есть ли способ сделать это?
EDIT
Оказывается, мне не нужно использовать какие-либо окончательной переменной. Это так же просто, как:
switch (service) {
case REG:
Это не произошло со мной, пока я не увидел комментарий Андреа. Спасибо за ваши ответы.
Я предполагаю, что 'service.getIndex()' 'возвращает Integer ', правильно? Можете ли вы изменить его так, чтобы он возвращал ваш enum? –
До версии 1.6 1.6 вы не можете использовать 'String' в' switch-case', но вы можете использовать его в Java 7. FYI – Joshi