Сопоставление шаблонов
Часть раздела Логика и управление потоком путешествия по Java на Coddy — урок 37 из 59.
Сопоставление с образцом в Java позволяет проверять, имеет ли объект определённый тип, и извлекать из него компоненты. Это упрощает операции проверки типа и приведения.
Давайте посмотрим, как использовать сопоставление с образцом с instanceof:
Object obj = "Hello";
if (obj instanceof String str) {
// str is automatically cast to String
System.out.println(str.toUpperCase());
}После выполнения приведённого выше кода вывод будет:
"HELLO"
Вы также можете использовать сопоставление шаблонов в выражениях switch:
Object value = 42;
String result;
if (value instanceof Integer i) {
result = "Number: " + i;
} else if (value instanceof String s) {
result = "Text: " + s;
} else {
result = "Unknown";
}После выполнения приведённого выше кода, result содержит:
“Number: 42”
Задание
ЛегкоСоздайте метод с именем processValue, который принимает один аргумент:
- Объект (
value), который может быть разных типов
Метод должен использовать сопоставление шаблонов с instanceof для обработки значения и возврата строки на основе этих правил:
- Если это Integer: вернуть "Number: " за которым следует удвоенное значение
- Если это String: вернуть "Text: " за которым следует значение в верхнем регистре
- Если это Boolean: вернуть "Boolean: " за которым следует противоположное значение (true становится false и наоборот)
- Для любого другого типа: вернуть "Unknown"
Шпаргалка
Сопоставление шаблонов в Java позволяет проверить, имеет ли объект конкретный тип, и извлечь из него компоненты с помощью instanceof:
Object obj = "Hello";
if (obj instanceof String str) {
// str автоматически приводится к String
System.out.println(str.toUpperCase());
}Вы можете объединять несколько проверок сопоставления шаблонов:
Object value = 42;
String result;
if (value instanceof Integer i) {
result = "Number: " + i;
} else if (value instanceof String s) {
result = "Text: " + s;
} else {
result = "Unknown";
}Попробуйте сами
import java.util.Scanner;
public class Main {
public static String processValue(Object value) {
// TODO: Использовать сопоставление шаблонов с instanceof для обработки значения
// Если это Integer: вернуть "Number: " + (value * 2)
// Если это String: вернуть "Text: " + value.toUpperCase()
// Если это Boolean: вернуть "Boolean: " + (!value)
// Для любого другого типа: вернуть "Unknown"
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String type = scanner.nextLine();
String inputValue = scanner.nextLine();
Object value = switch(type) {
case "Integer" -> Integer.parseInt(inputValue);
case "String" -> inputValue;
case "Boolean" -> Boolean.parseBoolean(inputValue);
default -> inputValue;
};
System.out.println(processValue(value));
}
}В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Логика и управление потоком
1Многомерные массивы
Основы 2D-массивовДоступ к элементам 2D-массиваВложенные циклы с 2D-массивамиПовторение - 2D-массивыСложение и вычитание матрицРваные массивы3D-массивы и вышеРаспространённые паттерны 2D-массивовПовторение - всё о массивах2HashMap Часть 1
Что такое HashMap?Объявление HashMapДоступ к значениямПроверка существования ключаИзменение словарейИтоги - HashMap3HashMap. Часть 2
Методы HashMapИтерация с keySet()Итерация с entrySet()Вложенный HashMapПовторение - Управление складомПовторение - Операции HashMap6Продвинутое управление потоком
Операторы метокВыражение switchСопоставление шаблоновОхранные клаузыИтоги - управление потоком9Проект - Счетчик уникальных слов
Ввод и хранение текстаОбработка слов