«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Изучение шаблонов записей Java и сопоставление с образцом

Изучение шаблонов записей Java и сопоставление с образцом

Опубликовано 23 августа 2024 г.
Просматривать:544

Exploring Java Record Patterns and Pattern Matching

Шаблоны записей Java были представлены в Java 16 как часть Project Amber и улучшены в Java 21 за счет добавления деконструкторов и сопоставления шаблонов. Эта функция обеспечивает более краткий и гибкий способ обработки данных в приложениях Java. В этом уроке мы рассмотрим концепцию шаблонов записей, то, как они помогают в сопоставлении с образцом, а также различные примеры кодирования.

1. Краткий обзор записей Java
Прежде чем углубляться в шаблоны записей, давайте кратко рассмотрим записи Java. Записи были представлены в Java 14 как новый тип класса, специально разработанный для хранения неизменяемых данных. Они устраняют необходимость написания шаблонного кода, предоставляя более краткий синтаксис для определения классов с данными. В следующем примере мы определяем запись с именем «Человек» с тремя полями: имя, фамилия и возраст.

record Person(String firstName, String LastName, int age) {}

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

  • Все поля являются окончательными
  • Класс неявно является окончательным
  • Объявление полей экземпляра запрещено

Записи автоматически генерируют конструктор и методы получения для каждого поля, что делает их более подходящими для носителей данных, чем традиционные классы.

2. Что такое шаблоны записей?
Шаблоны записей, представленные в Java 21, сочетают в себе концепцию шаблонов с записями, что позволяет легко деконструировать и извлекать значения из записей. Шаблон записи состоит из типа класса записи и необязательных переменных шаблона, которым присваиваются значения, извлеченные из целевой записи, только в случае успешного прохождения теста.

Нулевое значение не соответствует ни одному шаблону записи, поэтому переменные шаблона в этом случае инициализироваться не будут.

3. Деструкторы записей
Деструктор является обратным конструктору. Он извлекает значения из объекта, а не добавляет их. В контексте записей деструктор называется «деконструктором». Это позволяет разлагать значения записей на отдельные компоненты. Предположим, у нас есть запись с именем «Имя» со следующими полями:

запись клиента(String firstName, String LastName, int age) {}

Мы можем использовать деконструктор для извлечения значений этих полей из экземпляра записи «Клиент», как показано в следующем примере:

Клиент-клиент = новый клиент("Джейн", "Смит", 30);

if (customer instanceof Customer(String firstName, String LastName, int age)) {
System.out.println("Имя: " firstName); // Джейн
System.out.println("Фамилия: " LastName); // Смит
System.out.println("Возраст: " age); // 30
}

Структуры записей могут быть полезны в ситуациях, когда нам необходимо хранить и извлекать несколько связанных значений как один объект. Функция деконструкции записей позволяет нам легко извлекать и использовать эти значения в нашем коде.

4. Запись шаблонов в операторах Switch
В Java 16 появилось сопоставление шаблонов для операторов экземпляра, которое было расширено в Java 21 за счет включения операторов переключения. Это позволяет создавать более краткий и читаемый код при обработке нескольких шаблонов.

Предположим, у нас есть запись с именем «Счет» с тремя подтипами: «SavingAccount», «CreditCardAccount» и «HomeLoanAccount». Каждый подтип имеет свой способ расчета баланса. Мы можем использовать шаблон записи в операторе переключения для обработки этих трех случаев, как показано ниже:

Аккаунт интерфейса {}
запись SavingAccount (двойной баланс) реализует учетную запись {}
запись CreditCardAccount(двойной кредитный лимит, двойное использование) реализует учетную запись {}
запись HomeLoanAccount(double totalAmount, double sumPaid) реализует учетную запись {}

Учетная запись = новый CreditCardAccount(10000, 1000);

переключатель (форма) {
случай SavingAccount s:
System.out.println("Баланс счета равен " балансу);
перерыв;
случай CreditCardAccount c:
System.out.println("Кредитный баланс: " (creditLimit-used));
перерыв;
дело HomeLoanAccount h:
System.out.println("Баланс " (totalAmount-amountPaid));
перерыв;
по умолчанию:
System.out.println("Неизвестная учетная запись");
}

5. Вложенные шаблоны
Помимо извлечения значений из одной записи, шаблоны записей также можно вкладывать для обработки более сложных записей. Допустим, у нас есть запись с именем «Счет», в которой есть поле типа «Клиент» и еще одно поле типа «Адрес». Мы можем использовать шаблоны вложенных записей для извлечения значений из обоих этих полей, как показано в следующем примере:

запись клиента(String firstName, String LastName, int age) {}

запись учетной записи (клиент клиента, адрес адреса) {}

Клиент-клиент = новый клиент("Джон", "Доу", 25);
Адрес адрес = новый адрес("Мейн-стрит, 123","Город", "Штат");
Аккаунт аккаунта = новый аккаунт(клиент, адрес);

if (экземпляр аккаунта Account(Клиент(fName, lName, возраст), Адрес(улица, город, штат))) {
System.out.println("Имя: " fName); // Джон
System.out.println("Фамилия: " lName); // Доу
System.out.println("Возраст: " age); // 25
System.out.println("Адрес: "улица", "город", "штат); // Мейн-стрит, 123, город, штат
}

В этом примере мы используем два вложенных шаблона для извлечения значений из полей «Клиент» и «Адрес» записи «Счет».

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

запись клиента(String firstName, String LastName, int age) {}

запись учетной записи (клиент клиента, адрес адреса) {}

Клиент-клиент = новый клиент("Джон", "Доу", 25);

if (customer instanceof Customer(var fn, var ln, var age)) {
System.out.println("Имя: " fn); // Джон
System.out.println("Фамилия: " ln); // Доу
System.out.println("Возраст: " age); // 25
}

// Доступ к вложенным компонентам записи
Account account = new Account(customer, new Address("123 Main St", "New York", "NY"));
if (account instanceof Account(var cust, var адрес)) {
System.out.println("Клиент: " cust); // Клиент[firstName=Джон, LastName=Доу, age=25]
System.out.println("Адрес: " адрес); // Адрес[улица=123 Мейн-стрит, город=Нью-Йорк, штат=Нью-Йорк]
}

Здесь переменные шаблона «fn» и «ln» отличаются от соответствующих имен компонентов «fName» и «lName» в записи «Клиент». Это делает шаблоны записей более гибкими и позволяет избежать потенциальных конфликтов с именами переменных.

7. Заключение
В заключение, шаблоны записей Java предоставляют удобный способ деконструировать записи и извлекать из них значения. Они делают код более кратким, чистым и читабельным при обработке сопоставления с образцом в операторах экземпляра и переключателя. Шаблоны записей в сочетании с деструкторами записей позволяют более надежно обрабатывать сложные записи. В целом эта функция расширяет возможности использования записей в качестве носителей данных и делает программирование на Java более приятным.

Разработчики могут узнать больше о возможностях Java 21, пройдя подготовку к экзамену SE 21 Developer Certified Professional с использованием практических тестов MyExamCloud 1Z0-830.

Заявление о выпуске Эта статья воспроизведена по адресу: https://dev.to/myexamcloud/exploring-java-record-patterns-and-pattern-matching-3g8l?1. Если есть какие-либо нарушения, свяжитесь с [email protected], чтобы удалить ее.
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3