Menu
Coddy logo textTech

Сопоставление шаблонов

Часть раздела Логика и управление потоком путешествия по 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”

challenge icon

Задание

Легко

Создайте метод с именем processValue, который принимает один аргумент:

  1. Объект (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));
    }
}
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Логика и управление потоком