0Pricing
Java Academy · Урок

Шаблоны record

Деструктурируйте record в шаблонах

«Шаблоны record» — бесплатный урок Java Academy на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Java Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Java Academy содержит 4 уроков всего.

Шаблоны записей

Шаблон записи сопоставляется с записью и деструктурирует её, привязывая компоненты к переменным за один шаг. Больше не нужно вызывать каждый метод доступа вручную.

Запись для деструктуризации

Начните с простой записи. Её компоненты можно извлечь с помощью шаблона.

public class Main {
    record Point(int x, int y) {}

    public static void main(String[] args) {
        Point p = new Point(3, 4);
        System.out.println(p.x() + ", " + p.y());
    }
}

Деструктуризация с проверкой типа

Вместо instanceof Point p, а затем p.x(), напишите instanceof Point(int x, int y), чтобы сразу привязать x и y.

public class Main {
    record Point(int x, int y) {}

    public static void main(String[] args) {
        Object obj = new Point(3, 4);
        if (obj instanceof Point(int x, int y)) {
            System.out.println("Sum: " + (x + y));
        }
    }
}

Компоненты становятся локальными переменными

Имена внутри шаблона (x, y) — это новые локальные переменные, содержащие значения компонентов записи. Имена выбираете Вы; они не обязаны совпадать с именами записи.

public class Main {
    record Point(int x, int y) {}

    public static void main(String[] args) {
        Object obj = new Point(10, 20);
        if (obj instanceof Point(int a, int b)) {
            System.out.println("a=" + a + " b=" + b);
        }
    }
}

Использование var в шаблонах

Для компонента можно написать var, чтобы компилятор вывел его тип. Это особенно удобно, когда типы имеют большую длину.

public class Main {
    record Pair(String key, Integer value) {}

    public static void main(String[] args) {
        Object obj = new Pair("age", 30);
        if (obj instanceof Pair(var key, var value)) {
            System.out.println(key + " = " + value);
        }
    }
}

Шаблоны в операторе выбора

Шаблоны записей работают и в операторе выбора, благодаря чему ветви вариантов выглядят как описания форм данных.

public class Main {
    record Point(int x, int y) {}

    static String classify(Object obj) {
        return switch (obj) {
            case Point(int x, int y) when x == y -> "on diagonal";
            case Point(int x, int y) -> "at " + x + "," + y;
            default -> "not a point";
        };
    }

    public static void main(String[] args) {
        System.out.println(classify(new Point(5, 5)));
        System.out.println(classify(new Point(1, 2)));
    }
}

Сопоставление с выводом типов

Типы компонентов в шаблоне должны быть совместимы с объявленными типами записи. Безопаснее всего использовать точный тип или var.

Сочетание с условиями

Добавьте условие when после шаблона записи, чтобы сопоставление выполнялось только тогда, когда извлечённые значения удовлетворяют условию.

public class Main {
    record Temperature(double celsius) {}

    static String alert(Object o) {
        if (o instanceof Temperature(double c) && c > 38.0) {
            return "fever: " + c;
        }
        return "normal";
    }

    public static void main(String[] args) {
        System.out.println(alert(new Temperature(39.5)));
        System.out.println(alert(new Temperature(36.6)));
    }
}

Более удобный доступ к данным

Шаблоны записей особенно полезны, когда нужны всего несколько полей. Они устраняют цепочку вызовов методов доступа и сразу показывают нужные данные в месте сопоставления.

Значение null и шаблоны записей

Как и все шаблоны проверки типов, шаблон записи даёт значение ложь для null. Деструктуризация выполняется только после подтверждения, что значение является ненулевым экземпляром записи.

Практический пример

Выполните деструктуризацию, чтобы сразу вычислить значение по компонентам.

public class Main {
    record Rectangle(int width, int height) {}

    static int area(Object o) {
        if (o instanceof Rectangle(int w, int h)) {
            return w * h;
        }
        return 0;
    }

    public static void main(String[] args) {
        System.out.println(area(new Rectangle(4, 5)));
        System.out.println(area("not a rect"));
    }
}

Быстрая проверка

Проверьте, насколько хорошо Вы поняли шаблоны записей.

Итоги

Вы изучили шаблоны записей.

  • Они проверяют тип записи и одновременно деструктурируют её компоненты.
  • Имена компонентов — это новые локальные переменные, которые выбираете Вы; var выводит типы автоматически.
  • Они работают и с instanceof, и с switch.
  • Как и все шаблоны, они дают значение ложь для null.

Часто задаваемые вопросы

Урок «Шаблоны record» бесплатный?

Да — полный текст урока «Шаблоны record» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Java Academy, подпишись на CoddyKit PRO. Курс Java Academy содержит 4 уроков всего.

Чему я научусь в уроке «Шаблоны record»?

Деструктурируйте record в шаблонах Ты практикуешь Java Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Java Academy?

Предыдущий опыт не требуется. Java Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.

Сколько времени занимает урок «Шаблоны record»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Java Academy?

Да. Каждый урок Java Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Сопоставление с шаблоном для instanceof
  2. Шаблоны record
  3. Вложенные шаблоны record
  4. Шаблоны в switch
← Назад к Java Academy