Сопоставление шаблонов
Часть раздела Логика и управление потоком путешествия по Java на Coddy — урок 37 из 59.
Сопоставление с образцом в Java позволяет проверить, имеет ли объект определенный тип, и извлечь из него компоненты. Оно упрощает операции проверки и приведения типов.
Давайте посмотрим, как использовать сопоставление с образцом (pattern matching) с оператором instanceof:
Object obj = "Hello";
if (obj instanceof String str) {
// str автоматически приводится к типу String
System.out.println(str.toUpperCase());
}После выполнения приведенного выше кода вывод будет следующим:
"HELLO"
Вы также можете объединять проверки сопоставления с образцом в цепочку с помощью else if:
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), который может быть разных типов
Метод должен использовать сопоставление с образцом (pattern matching) с использованием instanceof для обработки значения и возвращать строку на основе следующих правил:
- Если это Integer: верните "Number: ", за которым следует удвоенное значение
- Если это String: верните "Text: ", за которым следует значение в верхнем регистре
- Если это Boolean: верните "Boolean: ", за которым следует противоположное значение (true становится false и наоборот)
- Для любого другого типа: верните "Unknown"
Попробуйте сами
import java.util.Scanner;
public class Main {
public static String processValue(Object value) {
// TODO: Используйте сопоставление с образцом (pattern matching) с 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Проект - Счетчик уникальных слов
Ввод и хранение текстаОбработка слов