Варианты с несколькими метками
Объединяйте несколько меток
«Варианты с несколькими метками» — бесплатный урок Java Academy на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Java Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Java Academy содержит 4 уроков всего.
Объединение меток
Часто несколько значений должны запускать одно и то же действие. Современный switch позволяет перечислить несколько меток в одном варианте, разделив их запятыми, и использовать одну общую ветку.
Метки, разделённые запятыми
Запишите значения одно за другим, разделяя их запятыми, перед ->. Если совпадёт хотя бы одно из них, выполнится эта ветка.
public class Main {
public static void main(String[] args) {
int day = 7;
switch (day) {
case 1, 2, 3, 4, 5 -> System.out.println("Weekday");
case 6, 7 -> System.out.println("Weekend");
}
}
}Определение гласных
Классический пример: объединить все гласные в одну ветку вместо написания пяти отдельных вариантов.
public class Main {
public static void main(String[] args) {
char c = 'o';
switch (c) {
case 'a', 'e', 'i', 'o', 'u' -> System.out.println("Vowel");
default -> System.out.println("Consonant");
}
}
}Несколько меток в выражениях
Варианты с несколькими метками работают и в выражениях switch, возвращая одно и то же значение для любой из перечисленных меток.
public class Main {
public static void main(String[] args) {
int month = 7;
String season = switch (month) {
case 12, 1, 2 -> "Winter";
case 3, 4, 5 -> "Spring";
case 6, 7, 8 -> "Summer";
default -> "Autumn";
};
System.out.println(season);
}
}Объединение строковых меток
Строковые значения также можно объединять. Здесь несколько вариантов написания команды сопоставляются с одним действием.
public class Main {
public static void main(String[] args) {
String cmd = "quit";
switch (cmd) {
case "quit", "exit", "q" -> System.out.println("Closing");
case "help", "h" -> System.out.println("Showing help");
default -> System.out.println("Unknown command");
}
}
}Объединение меток перечисления
Константы перечисления тоже могут использовать одну ветку, благодаря чему логика категорий остаётся компактной.
public class Main {
enum Day { MON, TUE, WED, THU, FRI, SAT, SUN }
public static void main(String[] args) {
Day d = Day.SAT;
String kind = switch (d) {
case SAT, SUN -> "Rest";
default -> "Work";
};
System.out.println(kind);
}
}Без повторяющихся меток
Каждая метка может появиться только один раз во всём switch. Если указать одно и то же значение в двух ветках, возникнет ошибка компиляции, поскольку компилятор не сможет определить, какую ветку выполнять.
public class Main {
public static void main(String[] args) {
int n = 2;
switch (n) {
case 1, 2 -> System.out.println("Low");
case 3, 4 -> System.out.println("High");
default -> System.out.println("Other");
}
}
}По сравнению со старым проваливанием
В старом синтаксисе с двоеточиями объединение требовало размещать пустые варианты с проваливанием один над другим перед одним общим телом. Синтаксис с запятыми гораздо понятнее и предотвращает случайное проваливание.
public class Main {
public static void main(String[] args) {
int code = 3;
switch (code) {
case 1, 3, 5, 7, 9 -> System.out.println("Odd");
case 0, 2, 4, 6, 8 -> System.out.println("Even");
}
}
}Объединение с блоками
Вариант с объединёнными метками тоже может использовать тело-блок. Любая совпавшая метка запускает весь блок.
public class Main {
public static void main(String[] args) {
char grade = 'B';
switch (grade) {
case 'A', 'B' -> {
System.out.println("Pass");
System.out.println("Well done");
}
default -> System.out.println("Try again");
}
}
}Сочетание с yield
Объединённые метки и yield работают вместе, когда общей ветке требуются вычисления.
public class Main {
public static void main(String[] args) {
int n = 4;
int points = switch (n) {
case 1, 2, 3 -> 10;
case 4, 5, 6 -> {
int bonus = n * 2;
yield 20 + bonus;
}
default -> 0;
};
System.out.println(points);
}
}Преимущество для читаемости
Варианты с несколькими метками сокращают длинные списки повторяющихся веток до нескольких понятных групп, делая замысел очевидным с первого взгляда.
public class Main {
public static void main(String[] args) {
int http = 204;
String group = switch (http / 100) {
case 1, 2, 3 -> "OK-ish";
case 4, 5 -> "Error";
default -> "Unknown";
};
System.out.println(group);
}
}Проверка знаний
Как в современной Java заставить несколько значений выполнять одну и ту же ветку switch?
Итоги
Вы изучили варианты с несколькими метками:
- Перечисляйте значения через запятую перед
-> - Это работает с типами
int, символами, строками и перечислениями - В отличие от старого синтаксиса, случайного проваливания нет
- Каждая метка может появиться только один раз
- При необходимости сочетайте их с блоками и
yield
Часто задаваемые вопросы
Урок «Варианты с несколькими метками» бесплатный?
Да — полный текст урока «Варианты с несколькими метками» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Java Academy, подпишись на CoddyKit PRO. Курс Java Academy содержит 4 уроков всего.
Чему я научусь в уроке «Варианты с несколькими метками»?
Объединяйте несколько меток Ты практикуешь Java Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Java Academy?
Предыдущий опыт не требуется. Java Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.
Сколько времени занимает урок «Варианты с несколькими метками»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Java Academy?
Да. Каждый урок Java Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Стиль switch со стрелкой
- switch как выражение
- Ключевое слово yield
- Варианты с несколькими метками