Можно ли в Java использовать параметр метода / конструктора в качестве оператора switch, константу case? - PullRequest
5 голосов
/ 31 января 2011

В случае переключения я заметил, что когда я пытаюсь использовать параметр в качестве константы, я получаю ошибку компиляции.Но я могу использовать поля / локальные переменные.

Действительно ли невозможно использовать параметр в качестве константы регистра?Или есть исключения (если да, приведите пример)?

Пример:

final int field = 0;
void method( final int parameter) {
    switch( 3) {
        case field: // ALLOWED
        case parameter; // NOT ALLOWED
    }
}

Я пытаюсь использовать параметр напрямую.Меня не интересуют решения, которые сохраняют значение параметра в локальной переменной.

Ответы [ 2 ]

3 голосов
/ 31 января 2011

Подобно C и C ++, Java допускает только константы времени компиляции в качестве значения для case.

Значение , инициализированный final классчлены могут быть определены во время компиляции и не могут быть изменены.final Параметры метода могут иметь разные значения при каждом вызове метода.

Для сравнения с параметрами метода, вам, вероятно, придется прибегнуть к старым добрым if...else....

РЕДАКТИРОВАТЬ:

Кстати, обратите внимание на , инициализированный выше.Член класса final без инициализатора в объявлении также нельзя использовать в качестве значения case.

2 голосов
/ 31 января 2011

Java может использовать только константы в case части

...