В моем коде программа делает что-то в зависимости от текста, введенного пользователем. Мой код выглядит так:
switch (name) {
case text1: {
//blah
break;
}
case text2: {
//blah
break;
}
case text3: {
//blah
break;
}
case text4: {
//blah
break;
}
Впрочем, код внутри чехлов text1
и text4
тот же. Поэтому мне было интересно, если бы я мог реализовать что-то вроде
case text1||text4: {
//blah
break;
}
Я знаю, что ||
оператор не будет работать в операторе case, но есть ли что-то подобное, что я могу использовать.
java
switch-statement
Ankush
источник
источник
Ответы:
Вы можете использовать оба
CASE
утверждения следующим образом.СМОТРИТЕ НАСТОЯЩИЙ ПРИМЕР: Пример кода вычисляет количество дней в конкретном месяце:
Это вывод из кода:
ПРОВАЛИВАТЬСЯ:
ПРИМЕР КОДА:
Это вывод из кода:
Использование строк в выражениях переключателя
Выход из этого кода 8.
ИЗ Java Docs
источник
break
обычно присоединяются к следующему блоку случаев, который визуально находится ниже, следовательно, проваливается .Вы можете сделать как:
источник
Эти
case
значения являются просто Codeless «GOTO» точек , которые могут одни и те же точки входа:Обратите внимание, что фигурные скобки являются избыточными.
источник
Просто сделать
источник
С интеграцией JEP 325: Выражения коммутатора (Preview) в ранние сборки доступа JDK-12 теперь можно использовать новую форму метки коммутатора, как: -
или перефразировать демо из одного из ответов , например:
Вот как вы можете попробовать - скомпилируйте функцию предварительного просмотра JDK12 с Maven
источник
Скобки не нужны. Просто сделать
Если кому-то интересно, это называется падением случая. Способность сделать это является причиной, по которой
break;
необходимо завершить рассмотрение дел. Для получения дополнительной информации см. Статью в Википедии http://en.wikipedia.org/wiki/Switch_statement .источник
Эти
fallthrough
ответы на другие являются хорошими.Однако другим подходом было бы извлечение методов из содержимого ваших операторов case, а затем просто вызов соответствующего метода из каждого случая.
В приведенном ниже примере регистр 'text1' и регистр 'text4' ведут себя одинаково:
Лично я нахожу этот стиль написания падежных операторов более понятным и немного более читаемым, особенно когда методы, которые вы вызываете, имеют хорошие описательные имена.
источник
text1
иtext4
ПОЧТИ ОПРЕДЕЛИТЕ то же самое, независимо от будущих изменений. Если они всегда должны быть связаны, внесение изменений в регистрtext1
(означающее изменение метода, который он вызывает) потребует измененияtext4
. В этом случае это явно не более ремонтопригодно. Это зависит от ситуации.Падение через подход - лучшее, что я чувствую.
источник
Ты можешь использовать:
источник
Значения регистра - это просто точки без перехода "goto", которые могут использовать одну и ту же точку входа:
Обратите внимание, что фигурные скобки являются избыточными.
источник
JEP 354. Выражения-переключатели (предварительный просмотр) в JDK-13 и JEP-361. Выражения-переключатели (стандартный) в JDK-14 расширят оператор switch, чтобы его можно было использовать в качестве выражения .
Теперь вы можете:
case L ->
):Таким образом, демонстрация одного из ответов может выглядеть так:
источник